У меня есть две модели, элементы и категории, которые имеют отношения «многие ко многим», используя ассоциацию has_and_belongs_to_many.Confused on Rails has_and_belongs_to_many Association
В моей модели у меня есть
class Item < ActiveRecord::Base
has_and_belongs_to_many :categories
end
и
class Category < ActiveRecord::Base
has_and_belongs_to_many :items
end
я создал таблицы объединения "categories_items":
create_table "categories_items", :id => false, :force => true do |t|
t.integer "category_id"
t.integer "item_id"
end
Я не получаю какие-либо ошибки, но я «Немного смущенно о том, что позволяет ассоциация. Прямо сейчас, если у меня есть какая-то категория @category, я могу найти все элементы в нем, делая
@category.items
Я предположил, что я мог бы найти категории, связанные с данным элементом @item, делая
@item.categories
Однако я получаю сообщение об ошибке: ActiveModel :: MissingAttributeError: отсутствует атрибут: категория
ли я непонимание, как has_and_belongs_to_many ассоциативные функции, или я что-то отсутствует в моем коде? Спасибо!
Edit - Дополнительная информация:
Я думаю, что путаница в том, как я должен назначить элементы/категории. В настоящее время я создаю их независимо друг от друга:
@item = Item.new
... add attributes ...
@item.save
и
@category = Category.new
... add attributes ...
@category.save
, а затем связать их с
@category.items << @item
@item.categories << @category
Что у вас здесь, выглядит нормально, а ассоциация * должна работать в обоих направлениях. Как назначается '@ item'? – x1a4
Я только что вставлял ваш код в тестовый проект (Rails 3.2.1), и ассоциация работала отлично для меня в обоих направлениях. –
Обычно исключение MissingAttribute вызывается, когда вы делаете Model.select («что-то»). First.somethingelse. Можете ли вы вставить git код, который вы используете, и backtrace? – bcd