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

标签 ruby-on-rails ruby methods undefined

我有 4 个类,Terminal belongs_to Port,Ports belongs to_Country 和 Countries belongs_to Region。

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 :throughCountry 模型的关系。

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

比 Controller ,

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

另请参阅:

关于ruby-on-rails - Ruby on Rails 4.2` 上的未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29105788/

相关文章:

ruby-on-rails - mongoid 的 a/b 测试 gem?

ruby - Rspec: "array.should == another_array"但不关心顺序

java - 在 PaintComponent() 方法中变量未更改

c++ - 如何使用公共(public)函数访问私有(private)变量?

ruby-on-rails - 找不到包含 'id' =all 的列表,搜索表单

ruby-on-rails - 扩展主干以支持 Rails 样式错误

iphone - 如何允许 a) 没有 CSRF token + SSL 的 HTTP 身份验证或 b) 需要带有设备的 CSRF token ?

ruby-on-rails - 在 Rspec 中重用代码的最佳实践?

ruby-on-rails - 在 Mini_Test 中调用任何 Ruby 类和未初始化的常量错误

c# - 获取当前方法名称