2011-12-14 13 views
1

私は、ユーザーhas_one companyとcompanyがユーザーに属しているユーザーと企業モデルを持っています。私は、会社のフィールドを登録フォームから会社テーブルに保存したがっています。会社テーブルの列はuser_idとcompany_nameです。私は私のUser.rb登録フォームのネストされた属性

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

これを行うには、以下の使用と私の登録フォームはこのようになります

  <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のための隠しフィールドを持っているか、それが得る必要です自動的に追加されました、私はまたそれが動作する登録コントローラの作成メソッドをオーバーライドしようとしましたが、deviseのエラーメッセージが動作していません。誰もがこれで私を助けることができます。私は逃したものを知りません。前もって感謝します。

答えて

4

1)いいえ、あなただけのユーザーがまだ会社に関連付けられていない場合は表示されませんfields_for方法

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

2)、及びその意志としてfields_for使用し、user_idの隠しフィールドを必要としません。新しいレコードで起こるので、あなたは:)ハックとして を <% f.object.company.build %>を行うか、コントローラのアクションでそれを適切な方法を行うことができます

+0

alony私は今、私が作成していない1つのIまでの企業モデルのための別々のコントローラを持っている必要がありますユーザー登録のためにdeviseを使用しています。私は自分のビューでfields_forを作成しました。 –

+0

いいえ、間違いなく。実際には、コールバックのUserモデルでそれを行うことができます: 'def after_initialize {| record | record.company.emptyの場合はrecord.company.build? } ' – alony

+0

ありがとうございました。私がやった間違いは、最初の解決策が働いている私のUserモデルのattr_accessibleにcompany_attributesを設定しなかったことでした。返事が遅れて申し訳ありません –

関連する問題