这是我第一次在这里提问。我知道我一定是错过了一些非常琐碎的事情,但现在已经有一段时间无法解决了。我对Rails还不熟悉。
我有四类,码头属于港口,港口属于国家,国家属于地区。
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>
谢谢你的帮助。
拉兹
塔哈
最佳答案
@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
参见:
Rails Guide