我为类别和产品创建了一个连接表。我的产品数据库中是否需要category_id列?当我进入rails控制台并键入Product.new时,没有类别属性。如果我想为产品分配类别,我该怎么做?这是我第一次使用连接表,我对它是如何工作感到困惑?
我的桌子:
create_table "categories", force: :cascade do |t|
t.string "name"
t.text "description"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category_id"
end
create_table "categories_products", id: false, force: :cascade do |t|
t.integer "category_id", null: false
t.integer "product_id", null: false
end
create_table "products", force: :cascade do |t|
t.string "title"
t.text "description"
t.string "image_url"
t.integer "price"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image", default: "{}"
end
我的协会:
class CategoryProduct < ActiveRecord::Base
belongs_to :category
belongs_to :product
end
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
has_many :categories_products
end
class Category < ActiveRecord::Base
has_and_belongs_to_many :products
has_many :categories_products
end
我的产品类别部分:
<% for category in Category.all %>
<div>
<%= check_box_tag "product[category_ids][]", category.id, @product.categories.include?(category) %>
<%= category.name %>
</div>
<% end %>
答案 0 :(得分:0)
您已经拥有HABTM联接表,因此您不需要在产品表中包含category_id。
您可以在rails控制台中为以下产品分配类别
product = Product.create(..)
category = Category.create(..)
product.categories << category //assigning category to product
exmaple在这里解释HABTM