这是我第一次在这里问一个问题。我知道我必须在这里遗漏一些非常微不足道的东西,但现在已经无法解决它了一段时间。我是铁杆新手。
我有4个类,终端属于端口,端口属于_Country,国家属于属于区域。
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
我收到以下错误:
terminals
#<Port::ActiveRecord_Associations_CollectionProxy:0x007fde543e75d0>
我收到以下错误:
ports
<Country::ActiveRecord_Relation:0x007fde57657b00>
感谢您的帮助。
cheerz,
塔哈
答案 0 :(得分:3)
@country.ports
返回端口数组,不返回终端数组。您应该声明has_many :through
与Country
模型的关系。
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
另见:
答案 1 :(得分:0)
@terminals = @country.ports.terminals
这行错误,ports是ActiveRecord Array。 你需要做
@country.ports.terminals.each do |terminal|
puts terminal.ports
end