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

时间:2015-03-17 17:27:27

标签: ruby-on-rails ruby methods undefined

这是我第一次在这里问一个问题。我知道我必须在这里遗漏一些非常微不足道的东西,但现在已经无法解决它了一段时间。我是铁杆新手。

我有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,

塔哈

2 个答案:

答案 0 :(得分:3)

@country.ports返回端口数组,不返回终端数组。您应该声明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

另见:

答案 1 :(得分:0)

@terminals = @country.ports.terminals

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

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