创建rails连接表后如何链接表单 [英] How to link form after creating rails join table
问题描述
我的 Rails 3.1 应用程序中有一个产品模型,如下所示:
Hi have a products model in my Rails 3.1 app which looked like this:
+----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| type | text | YES | | NULL | |
| title | text | YES | | NULL | |
| description | text | YES | | NULL | |
| price | text | YES | | NULL | |
| img_src | text | YES | | NULL | |
| source | text | YES | | NULL | |
| sr_id | text | YES | | NULL | |
| categories | text | YES | | NULL | |
+----------------+---------------+------+-----+---------+----------------+
我使用以下迁移创建了 Categories_Products(未创建模型):
I created a Categories_Products using the following migration (Did not create a model):
class CreateCategoriesProducts < ActiveRecord::Migration
def change
create_table :categories_products, :id => false do |t|
t.references :product
t.text :categories
t.timestamps
end
end
end
1) 如何设置我的产品表单,以便在填写 Categories text_field 时,它会更新我刚刚创建的连接表.我从产品表中删除了类别列.
1) How do I set up my products form so that when Categories text_field is filled in, it will update the join table I just created. I deleted the categories column from the products table.
2) 我这样做的全部原因是因为我最初在一个字段中有多个类别 ID,并且需要将它们分解以便我可以轻松地执行不同的计数等.用户需要能够为每个产品添加多个类别,我如何告诉 Rails 将添加到数据库中的新行的每个类别保存?
2) The whole reason I did this is because I initially had multiple Category ID's in a single field, and needed to break them up so that I could easily perform distinct counts and such. The user needs to be able to add multiple categories per a product, how can I tell Rails to save each category added into a new row in the db?
推荐答案
一个 Product 可以有多个 Categories,一个 Category 可以引用多个 Products,对吗?如果是这样,您想创建第三个关联表,我们称其为 product_categories
,并使用标准的 Rails 习语来支持它:
A Product can have multiple Categories, and a Category can refer to multiple Products, right? If so, you want to create a third association table, let's call it product_categories
, and use the standard Rails idioms to support it:
# file: app/models/product.rb
class Product < ActiveRecord::Base
has_many :categories, :through => :product_categories
has_many :product_categories, :dependent => :destroy
end
# file: app/models/category.rb
class Category < ActiveRecord::Base
has_many :products, :through => :product_categories
has_many :product_categories, :dependent => :destroy
end
# file: app/models/product_category.rb
class ProductCategory < ActiveRecord::Base
belongs_to :product
belongs_to :category
end
... 以及您的表/迁移:
... and your tables / migrations:
# file: db/migrate/xxx_create_products.rb
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
...
t.timestamps
end
end
end
# file: db/migrate/xxx_create_categories.rb
class CreateCategories < ActiveRecord::Migration
def change
create_table :categories do |t|
t.string :name
t.timestamps
end
end
end
# file: db/migrate/xxx_create_product_categories.rb
class CreateProductCategories < ActiveRecord::Migration
def change
create_table :product_categories do |t|
t.references :product
t.references :category
t.timestamps
end
end
end
这样,为每个产品添加多个类别"变得容易:
This way, "adding multiple categories per product" becomes easy:
my_product.categories.create(:name => "toy")
这将创建一个名为toy"的类别以及将 my_product 和该新类别相关联的 ProductCategory.如果您需要完整的说明,本指南是一个起点.
This will create a Category named "toy" as well as the ProductCategory that associates my_product and that new Category. If you want the full description, this Guide is a place to start.
这篇关于创建rails连接表后如何链接表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!