这是我第一次在这里提问。我知道我一定是错过了一些非常琐碎的事情,但现在已经有一段时间无法解决了。我对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

10-07 12:39