Не удается получить доступ к полю через 3 модели в Rails 5 - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь сделать что-то очень похожее на этот вопрос

У меня есть 4 модели, одна из которых (CoffeeBlend) является таблицей соединений:

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 таблице есть столбец с именем country_id, в котором указан идентификатор из таблицы countries.

В моем coffee_roasts_show я хочу иметь возможность вывести связанную страну изкофейное зерно.Моя последняя попытка выглядит как

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

, которая дает undefined method 'country'

Или

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

возвращает undefined method 'countries'

Есть ли у меня ассоциацииправильный?Мой код шоу неправильный?

1 Ответ

0 голосов
/ 21 декабря 2018

Метод @coffee_roast.coffee_beans возвращает вам связь, а не одну запись.Вот почему вы не можете позвонить #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(', ') %>
...