创建rails连接表后如何链接表单 [英] How to link form after creating rails join table

查看:30
本文介绍了创建rails连接表后如何链接表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆