2016-01-02 4 views
0

У меня есть 3 таблицы Rails 4.2: книги, теги, категоризации, где категоризация - это много для многих таблиц соединений для двух других.Как ссылаться на столбцы таблицы соединений из представления rails index.html.erb

Внутри файла show.html.erb, я могу сказать,

<%= @categorization.book.title %> 

и будет отображаться название книги, но внутри index.html.erb, если я скажу что-то подобное, как

<%= categorizations.each do |categorization| %> 
<%= categorization.book_id %> # this is ok 
<%= categorization.book.title %> # not ok 
... 
<% end %> 

сообщение об ошибке

undefined method `title' for nil:NilClas 

Я уверен, что есть способ, чтобы получить рельсы, чтобы сделать это, но я не делаю это правильно. Есть ли способ попросить контроллер сделать соединение, используя все три таблицы, а не только таблицу соединений? Или мне нужно создать экземпляр объекта книги внутри цикла (звучит уродливо, но ...)?

ответ

1

Похоже, что в ваших моделях отсутствуют ассоциации ActiveRecord. Чтобы иметь аксессуар book на вашей модели categorization, вам необходимо будет определить ассоциацию в моделях. Из того, что вы говорите выше, похоже, что вы хотите создать ассоциацию has_many :through.

Для получения более подробной информации см. Active Record Associations documentation. Я полагаю, что это будет выглядеть примерно так:

class Book < ActiveRecord::Base 
    has_many :categorizations 
    has_many :tags, through: :categorizations 
end 

class Categorization < ActiveRecord::Base 
    belongs_to :book 
    belongs_to :tag 
end 

class Tag < ActiveRecord::Base 
    has_many :categorizations 
    has_many :books, through: :categorizations 
end 

После того, как у вас есть ассоциации в месте, вы должны быть в состоянии сделать @categorization.book без проблем.

+0

класса Book : категоризации –

+0

класс Tag : категоризации –

+0

К сожалению о форматирование –

Смежные вопросы