2010-02-14 6 views
1

* 모든 코드를 보려면 주석을 클릭하십시오.폼의 생성 동작을 사용하여 조인 테이블과 상호 작용할 수 있습니까?

새로운 "accounts"가 생성됩니다. 각각의 새로운 계정은 have_many : users입니다. 사용자는 have_and_belong_to_many 역할입니다. 새로운 사용자에게 새 계정 양식으로 기존 역할을 할당하려고합니다. 일반적으로 쉬운 프로세스 그러나 ...

사용자와 역할 간의 has_and_belong_to_many 연관은 사용자와 역할이 조인 테이블에 의해 연결됨을 의미합니다. 나는 함께 일할 모델이 없다. 그래서 나는 이것을 코딩하는 방법을 모릅니다. here (대답)에 설명 된 방법을 사용하여 새 역할을 만들 수 있지만 계정 모델을 통해 기존 사용자 역할에 기존 역할을 할당하는 것은 우둔합니다. 나는 레일에서 만든 새 사용자의 ID와 같은 기능을하는 (29)을 필요로하는 곳에 SQL (0.1ms) INSERT INTO "roles_users" ("role_id", "user_id") VALUES (6, 29) 즉 VAULES (6, ID)

현재 코드 :

동일한 SQL은 다음과 같이 될 것이다 (새 역할을 생성)

<% f.fields_for :users do |builder| %> 
<%= render 'user_fields', :f => builder %> 
<p>Login : <%= f.text_field :login %> 
<p>Email : <%= f.text_field :email %> 
<p>Password : <%= f.password_field :password %> 
<p>Confirm Password : <%= f.password_field :password_confirmation %> 
<%= f.hidden_field :account_id, :value => :id %> 


<% f.fields_for :roles do |builder| %> 
    <%= builder.hidden_field :name, :value => 'test' %> 
<% end %> 

Account.rb

has_many :users 
accepts_nested_attributes_for :users 

User.rb

has_and_belongs_to_many :roles 
accepts_nested_attributes_for :roles 

accounts_controller.rb

def new 
    @account = Account.new 
    #builds user and roles in memory 
    1.times do 
     user = @account.users.build 
    1.times { user.roles.build } 
    end 

답변

1

문제는 당신이 당신이하지 않아야 할 때를 위해 accepts_nested_fields을 사용하고 있습니다. 호출 모델에서 참조 된 모델의 항목을 만들고 파괴하는 데 사용됩니다. 역할 자체가 아닌 사용자 모델에서 연결을 관리하려고합니다.

여기에 수행 할 수있어 무엇 :

  1. 사용자 생성 형태로
  2. 지정 role_ids에 필드를 user.rb에서 accepts_nested_attributes_for :roles을 제거 (선택 사항이지만 권장). 레일 대신 기존 역할을 수정하거나 새로 작성하는 작성에 참여 모델을 채우는 것, 무엇을 변경하지 않고

    <% f.fields_for :users do |builder| %> 
    <p>Login : <%= f.text_field :login %> 
    <p>Email : <%= f.text_field :email %> 
    <p>Password : <%= f.password_field :password %> 
    <p>Confirm Password : <%= f.password_field :password_confirmation %> 
    <%= f.hidden_field :account_id, :value => :id %> 
    
    <%= f.collection_select :role_ids, Role.all, :id, :name, {}, :multiple => true %> 
    
    <% end %> 
    

    :

이보기는 점을 설명한다.

+0

스타 벅스 기프트 카드를 보낼 수 있습니까? 나는이 문제에 종일 종사하고있다. 고맙습니다! –

관련 문제