加入表HABTM协会

时间:2016-05-11 01:44:39

标签: ruby-on-rails database has-and-belongs-to-many jointable

我为类别和产品创建了一个连接表。我的产品数据库中是否需要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 %>

1 个答案:

答案 0 :(得分:0)

您已经拥有HABTM联接表,因此您不需要在产品表中包含category_id。

您可以在rails控制台中为以下产品分配类别

product = Product.create(..)
category = Category.create(..)
product.categories << category //assigning category to product

exmaple在这里解释HABTM