2011-10-13 30 views
5

私はuser_infoという名前のユーザーと1対1の関係を作成しています。 以下は実際の解決策です。 user.rb user_info.rbでRails 3:has_oneで作成、ネストされた属性が更新されない

has_one :user_info 
accepts_nested_attributes_for :user_info, :allow_destroy => true 
attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :user_info_attributes 

私は含めるべきではないことを理解し

<% resource.build_user_info if resource.user_info.nil? %> 
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> 
    ... 
    <%= f.fields_for :user_info do |info| %> 
     <%= info.text_field :first_name %> 

工夫/登録/ edit.html.erbで

belongs_to :user 
attr_accessible :first_name, :last_name 

ビューのビルド。しかし、私は開発者のコ​​ントローラーやモデルに触れたくはありません。これが最も簡単な方法です。

+0

は、ビルドラインが正常に動作していないことが判明します。 resource.user_info.nilの場合は '<%resource.build_user_info? %> ' –

答えて

3

にお電話で:autosave => trueを試してみては、ビルドラインは、ビューで正常に動作していないことが判明します。

は次のようになります。 <% resource.build_user_info if resource.user_info.nil? %>

1

accepts_nested_attributes_for

+0

' accept__nested attributes_for'の代わりに 'has_one:user_info、:autosave => true'に追加する必要があります。しかし、これはまだ動作しません。 first_nameは保存されません。 –

+0

ええと、なぜあなたは既存のユーザーモデルに情報を追加するだけでいいですか?それはそれを行う最も簡単な方法でしょう。 – janders223

+2

大きなユーザーモデルを作るのは良いモデリングではありません。通常、ユーザーモデルには、ウェブサイト、住所、私についての多くの二次情報、趣味などが含まれています。同じモデルを使用すると、ユーザーリストや認証操作の必要があるたびに、 else。 1対1の関係で2つのモデルに分割するのが一般的であり、良い方法です。 –

関連する問題