3

Devise に新しいユーザーを登録する際、同時にこの新しいユーザーへの新しい Family オブジェクト リンクを作成する必要があります (ユーザーは家族の長です)。

私の家族モデル:

belongs_to user

私のユーザーモデル:

attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :family
has_one :family
accepts_nested_attributes_for :family

devise/registration/new.html.erb で

<%= simple_form_for([resource, Family.new], :as => resource_name, :url =>     registration_path(resource_name), :html => {:class => 'form-vertical' }) do |f| %>
  <%= f.error_notification %>
  <%= display_base_errors resource %>
  <%= f.input :name, :autofocus => true %>
  <%= f.input :email, :required => true %>
  <%= f.input :password, :required => true %>
  <%= f.input :password_confirmation, :required => true %>

  <% f.fields_for :family do |family_form| %>
    <p><%= family_form.label :name %></p>
    <p><%= family_form.text_field :name %></p>
  <% end %>

  <%= f.button :submit, 'OK', :class => 'btn-primary' %>
<% end %>

しかし、これは機能していません。このような質問がいくつか見つかりましたが、それを修正できませんでした。

何か案が ?

更新 1

次のエラーが発生しました。

undefined method `email' for #<Family:0x007f892a12c310>

ファミリーは名前だけで、メールが無いモデルです。新しいユーザーを作成するときに、名前を付けて新しい Family オブジェクトを作成できるようにする必要があります (それをユーザーにリンクすることもできます)。

更新 2

登録コントローラーに resource.build_family を追加しました。ファミリ オブジェクトは正しく作成され、ユーザに関連付けられています (デバッグ用に new.html.erb に <%= resource.family %> を表示できます) が、ファミリのフォームは表示されません。

4

2 に答える 2

1

<%=fields_for には等号が必要です

<%= f.fields_for :family do |family_form| %>
    <p><%= family_form.label :name %></p>
    <p><%= family_form.text_field :name %></p>
  <% end %>

また、ユーザー モデルでは、:family ではなく :family_attribues にアクセスできるようにする必要があります。

attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :family_attributes
has_one :family
accepts_nested_attributes_for :family
于 2013-02-12T15:27:05.637 に答える