4

두 가지 모델 User 및 Category가 있습니다.HABTM에서 중첩 속성을 사용하려면 어떻게해야합니까?

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의 유형은 다를 수 있습니다. 어떻게이 기능을 유지할 수 있습니까? 도와주세요. 나는 당신의 질문에 대답 할 준비가되어 있습니다.

+0

카테고리 'has_and_belongs_to_many : 사용자''카테고리', 그렇지? 또한,이'type'으로 무엇을하고 싶습니까? 나는 그것을 얻지 못한다 .... – gabrielhilal

+0

고마워. 나는 바뀌었고 유형 필드에 사용자가 "type1"유형의 category2를 가지고 있고 user2가 "type2"유형과 동일한 category2를 가지고 있다고 말합니다. 어디에서 유형 필드를 유지해야합니까? 내가 조인 테이블에 입력 필드가 있다면 어떻게 그 항목을 추가하고 해당 정보를 얻을 수 있습니까? – logesh

답변

9

당신은 관계 분야 type을 추가 has_many :through 대신 HABTM의 사용해야합니다

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 

클래스 Linetype 속성을 추가합니다.

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

두 평온한 행동과 컨트롤러가 필요합니다 : 사용자 형태로, 그리고 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 

편집 -

범주는 사용자와 무관하며 사용자는 범주와 독립적입니다.

클래스 Linecategory_iduser_id 통해 사용자 및 범주에 가입 할 협회 :

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

예 :

자식 허브 : https://github.com/gabrielhilal/nested_form

Heroku가 : http://nestedform.herokuapp.com/

+0

accepts_nested_attributes_for : lines을 사용하면 카테고리 정보가 카테고리 테이블에 어떻게 저장됩니까? 나에게 약간의 불확실성이있다. 좀 더 설명해 주 시겠어요? – logesh

+0

또 다른 사용자가 카테고리에 새로운 값을 입력하면 카테고리가 이미 존재하는지 확인해야하며 카테고리의 ID를 유형과 함께 추가해야한다고 말하십시오. – logesh

+0

이해하는 데 약간의 시간이 걸렸습니다. 어쨌든 조인 테이블 모델 인 belongs_to : user 및 belongs_to : category가 있어야하는 작은 수정 하나와 감사합니다. – logesh