如何在创建rails连接表后链接表单

您好我的Rails 3.1应用程序中有一个产品模型,如下所示:

+----------------+---------------+------+-----+---------+----------------+ | 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(没有创建模型):

 class CreateCategoriesProducts  false do |t| t.references :product t.text :categories t.timestamps end end end 

1)如何设置我的产品表单,以便在填写类别text_field时,它将更新我刚创建的连接表。 我从products表中删除了categories列。

2)我这样做的全部原因是因为我最初在一个字段中有多个类别ID,需要将它们分解,以便我可以轻松地执行不同的计数等。 用户需要能够为每个产品添加多个类别,如何告诉Rails保存添加到数据库中新行的每个类别?

一个产品可以有多个类别,一个类别可以引用多个产品,对吧? 如果是这样,你想创建第三个关联表,让我们称之为product_categories ,并使用标准的Rails惯用语来支持它:

 # 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 

...和你的表/迁移:

 # 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 

这样,“为每个产品添加多个类别”变得简单:

 my_product.categories.create(:name => "toy") 

这将创建一个名为“toy”的类别以及将my_product与该新类别相关联的ProductCategory。 如果您想要完整的描述, 本指南是一个开始的地方。