2011-12-14 6 views
1

사용자 및 회사가 has_one 회사 및 회사가 사용자에게 속한 사용자 및 회사 모델이 있습니다. 회사 테이블을 등록 양식에서 회사 테이블로 저장하려고했습니다. 여기서 회사 테이블 열은 user_id 및 company_name입니다. 나는이등록 양식의 중첩 된 속성

  <h2>Sign up</h2> 
    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>    

<%= devise_error_messages! %> 

<p><%= f.label :firstname %><br/> 
    <%= f.text_field :firstname %></p> 

<p><%= f.label :lastname %><br/> 
    <%= f.text_field :lastname %></p> 

<p><%= f.label :email %><br/> 
    <%= f.email_field :email %></p> 

<p><%= f.label :password %><br/> 
    <%= f.password_field :password %></p> 

<p><%= f.label :password_confirmation %><br/> 
    <%= f.password_field :password_confirmation %></p> 

<%= fields_for :company do |builder| %> 
    <%= builder.label :company %> 
    <td><%= builder.text_field :company_name%> </td> 
<% end %> 

<p><%= f.submit "Sign up" %></p> 
<% end %> 

<%= render :partial => "devise/shared/links" %> 

는이 회사 테이블의 USER_ID에 대한 숨겨진 필드이 필요하다처럼 내 User.rb

 has_one :company, :class_name => 'Company', :foreign_key => :user_id, :dependent => :destroy 
     accepts_nested_attributes_for :company 

에서이 작업을 수행 그리고 내 등록 양식 보이는 다음을하거나 얻을 것이다 사용 자동으로 추가, 나는 또한 그것이 작동하지만 등록자 오류 메시지가 작동하지 않는 등록 컨트롤러의 작성 방법을 무시하려했습니다. 누구든지이 일에서 나를 도울 수 있습니까? 나는 내가 놓친 것을 모른다. 미리 감사드립니다.

답변

4

1) 아니, 당신은 단지 사용자가 아직 회사를 관련이없는 경우 표시되지 않습니다 fields_for 방법

<%= f.fields_for :company do |builder| %> 
    ... 
<% end %> 

2), 그 의지로 fields_for 사용합니다 USER_ID 숨겨진 필드가 필요하지 않습니다 새로운 기록으로 일어날 수 있으므로, <% f.object.company.build %>을 해킹 해주세요 :) 또는 컨트롤러 액션에서 적절한 방법을 사용하십시오.

+0

alony 회사 모델을위한 별도의 컨트롤러가 있어야합니다. 지금까지는 하나도 만들지 않았습니다. 사용자 등록을 위해 devise를 사용하고 있으며 필자의 시각에서 fields_for를 만들었습니다. –

+0

아니요, 확실히 아닙니다. 사실 콜백의 User 모델에서 이것을 할 수 있습니다 : 'def after_initialize {| record | record.company.buy 인 경우 record.company.build? }' – alony

+0

감사의 말을 내가 실수 한 것은 사용자의 attr_accessible에서 company_attributes를 설정하지 않았다는 것입니다. 늦은 답변 죄송합니다 –