Rails 上 Ruby 上的未定义方法 4.2`
undefined method on Ruby on Rails 4.2`
第一次在这里提问。我知道我一定在这里遗漏了一些非常微不足道的东西,但现在已经有一段时间无法解决了。我是 rails.
的新手
我有 4 个 类,码头 belongs_to 港口,港口属于 to_Country 和国家 belong_to 地区。
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
我收到以下错误:
#<Port::ActiveRecord_Associations_CollectionProxy:0x007fde543e75d0>
的未定义方法 terminals
我收到以下错误:
未定义方法 ports
<Country::ActiveRecord_Relation:0x007fde57657b00>
感谢您的帮助。
加油,
塔哈
@terminals = @country.ports.terminals
这一行错了,ports是ActiveRecord Array。
你需要做
@country.ports.terminals.each do |terminal|
puts terminal.ports
end
@country.ports
return 端口数组,没有终端数组 returned。您应该声明 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.
的新手我有 4 个 类,码头 belongs_to 港口,港口属于 to_Country 和国家 belong_to 地区。
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
我收到以下错误:
#<Port::ActiveRecord_Associations_CollectionProxy:0x007fde543e75d0>
terminals
我收到以下错误:
未定义方法 ports
<Country::ActiveRecord_Relation:0x007fde57657b00>
感谢您的帮助。
加油,
塔哈
@terminals = @country.ports.terminals
这一行错了,ports是ActiveRecord Array。 你需要做
@country.ports.terminals.each do |terminal|
puts terminal.ports
end
@country.ports
return 端口数组,没有终端数组 returned。您应该声明 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
另请参阅: