Rails 上 Ruby 上的未定义方法 4.2`

undefined method on Ruby on Rails 4.2`

第一次在这里提问。我知道我一定在这里遗漏了一些非常微不足道的东西,但现在已经有一段时间无法解决了。我是 rails.

的新手

我有 4 个 类,码头 belongs_to 港口,港口属于 to_Country 和国家 belong_to 地区。

class Region < ActiveRecord::Base
    has_many :countries
end  

class Country < ActiveRecord::Base
  belongs_to :region
  has_many :ports
end

class Port < ActiveRecord::Base
  belongs_to :country
  has_many :terminals
end

class Terminal < ActiveRecord::Base
  belongs_to :port
end

我正在尝试 运行 以下代码:

class TerminalsController < ApplicationController
    def index    
        @country = Country.find_by name: 'Pakistan'
        @terminals = @country.ports.terminals
    end
end

我收到以下错误: #<Port::ActiveRecord_Associations_CollectionProxy:0x007fde543e75d0>

的未定义方法 terminals

我收到以下错误:

未定义方法 ports <Country::ActiveRecord_Relation:0x007fde57657b00>

感谢您的帮助。

加油,

塔哈

@terminals = @country.ports.terminals

这一行错了,ports是ActiveRecord Array。 你需要做

@country.ports.terminals.each do |terminal|
  puts terminal.ports
end

@country.ports return 端口数组,没有终端数组 returned。您应该声明 has_many :throughCountry 模型的关系。

class Country < ActiveRecord::Base
  belongs_to :region
  has_many :ports
  has_many :terminals, through: :ports
end

比控制器,

class TerminalsController < ApplicationController
    def index    
        @country = Country.find_by name: 'Pakistan'
        @terminals = @country.terminals # Don't need intermediate ports
    end
end

另请参阅: