Самый простой способ сделать это, используйте has_and_belongs_to_many
.Убедитесь, что при создании таблицы CategoriesProucts файл миграции создается без идентификатора:
create_table :categories_products, :id => false do |t|
Тогда ваша модель категрии должна выглядеть следующим образом:
class Category < ActiveRecord::Base
has_and_belongs_to_many :products
end
И модель вашего продуктадолжно выглядеть так:
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
end
Вот еще один метод.Это также будет работать, если вы хотите иметь больше контроля над изменениями позже.В вашей категории Модель продукта:
class CategoriesProduct < ActiveRecord::Base
belongs_to :category
belongs_to :product
end
В вашей модели Категория:
class Category < ActiveRecord::Base
has_many :categories_products
has_many :products, :through => :categories_products
end
В модели вашего продукта:
class Product < ActiveRecord::Base
has_many :categories_products
has_many :categories, :through => :categories_products
end
Тогда вы сможете выполнить:
Category.create(:name => "Cat1")
Category.first.products.create(:name => "Prod1")
Product.first.categories.create(:name => "Cat2")
и т.д ...
Эта инфографика может быть полезна для визуализации концепции.