无法通过 Rails 5 中的 3 个模型访问字段

Can't access field through 3 models in Rails 5

我正在尝试做一些与此非常相似的事情

我有 4 个模型,其中一个 (CoffeeBlend) 是一个连接 table:

class CoffeeRoast < ApplicationRecord
    has_many :coffee_blends
    has_many :coffee_beans, through: :coffee_blends
    has_one :country, through: :coffee_beans
end

class CoffeeBean < ApplicationRecord
    has_many :coffee_blends
    has_many :coffee_roasts, through: :coffee_blends
    belongs_to :country
end

class Country < ApplicationRecord
  has_many :coffee_beans
end

class CoffeeBlend < ApplicationRecord
    belongs_to :coffee_bean
    belongs_to :coffee_roast
end

我的 coffee_beans table 有一个名为 country_id 的列,其中填充了 countries table.

中的 ID

在我的coffee_roasts_show我希望能够拉出咖啡豆的关联国家。我最近的尝试看起来像

<% @coffee_roast.coffee_beans.country.country_name %>

这给出 undefined method 'country'

或者

<% @coffee_roast.coffee_beans.countries.country_name %>

returns undefined method 'countries'

我的联想正确吗?我的显示代码有误吗?

方法@coffee_roast.coffee_beansreturns你关联了,没有单条记录。这就是为什么你不能在上面调用 #country 的原因。如果你需要所有国家,你可以使用 #map:

<% @coffee_roast.coffee_beans.map {|cb| cb.country.country_name } %>

编辑:

如果您想在浏览器中显示列表,请在您的 ERB 标记中添加 =

<%= @coffee_roast.coffee_beans.map {|cb| cb.country.country_name } %>

使用 Array#join

将国家名称显式转换为字符串可能也很有用
<%= @coffee_roast.coffee_beans.map {|cb| cb.country.country_name }.join(', ') %>