5

我有两个模型用户和类别。

    class User < ActiveRecord::Base
        has_and_belongs_to_many :categories
        accepts_nested_attributes_for :categories
    end

相似地

    class Category < ActiveRecord::Base
        has_and_belongs_to_many :users
    end

我有一个要求,我必须将类别添加到类别表并添加参考,以便我可以获得与用户相关的类别,但如果另一个用户输入相同的类别,那么我必须使用 id 而不是创建新的一。我该怎么做?

还有一件事是我必须添加一个引用该类别类型的属性类型。例如

user1 ----> category1, category2
user2 ----> category2

这里 user1 和 user2 有 category2 但 category2 中的类型可能不同。那么我该如何维护呢?请帮我。我准备回答你的问题。

4

1 回答 1

10

您必须使用has_many :through而不是HABTM将字段添加type到关系中:

class User < ActiveRecord::Base
  has_many :lines
  accepts_nested_attributes_for :lines
  has_many :categories, through: :lines
end

class Line < ActiveRecord::Base
  belongs_to :users
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :lines
  has_many :users, through: :lines
end

type属性添加到类Line

参考: http: //guides.rubyonrails.org/association_basics.html#the-has-many-through-association

您将需要两个具有 restful 操作的控制器:userscategories

然后,在您的用户表单中,类似于:

<%= nested_form_for @user do |f| %>
...#user attributes
<%= f.fields_for :lines do |line| %>
<%= line.label :category %>
<%= line.collection_select(:category_id, Category.all, :id, :name , {include_blank: 'Select Category'} ) %>
<%= line.label :type %>
<%= line.text_field :type %>
...#the form continues

编辑 -

类别与用户无关,用户与类别无关。

关联类将通过andLine加入用户和类别:category_iduser_id

________          _______________
| user |          |     line    |          ____________
|----- |          |-------------|          | category |
| id   |----------| user_id     |          |----------|
| name |1        *| category_id |----------| id       |
| email|          | type        |*        1| name     | 
|______|          |_____________|          |__________|

例子:

git 集线器:https ://github.com/gabrielhilal/nested_form

heroku: http: //nestedform.herokuapp.com/

于 2013-09-02T14:50:43.363 回答