Отношения многие-ко-многим в рельсах не используют belongs_to
.Вместо этого вы хотите использовать один из нескольких вариантов.Первый - has_and_belongs_to_many
:
# app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :items
end
# app/models/item.rb
class Item < ActiveRecord::Base
has_and_belongs_to_many :categories
end
. Вам нужно добавить дополнительную таблицу соединений в базу данных с такой миграцией:
class AddCategoriesItems < ActiveRecord::Migration
def self.up
create_table :categories_items, :id => false do |t|
t.integer :category_id
t.integer :item_id
end
end
def self.down
drop_table :categories_items
end
end
.имя объединяемой таблицы является комбинацией имен двух других таблиц.Таблицы должны быть упомянуты в алфавитном порядке, как указано выше, и :id => false
должен быть там, так как нам не нужен первичный ключ в этой таблице.Это нарушит ассоциацию рельсов.
Существует также другой, более сложный метод, известный как has_many :through
, если вам нужно хранить информацию о самих отношениях.Я написал целую статью, подробно описывающую, как использовать оба метода и когда использовать каждый из них:
Основные ассоциации многие-ко-многим в Rails
Я надеюсь, что этопоможет, и свяжитесь со мной, если у вас есть какие-либо вопросы!