3

在向 Devise 注册新用户期间,我需要同时为该新用户创建一个新的 Family 对象链接(该用户是一家之主)。

我的家庭模型:

belongs_to user

我的用户模型:

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

在设计/注册/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_attribues 可访问而不是 :family

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 回答
0

如果你得到undefined method 'email' for #<Model:0x007f892a12c310>

您需要Devise::RegistrationsController按照文档中的说明进行覆盖:https ://github.com/heartcombo/devise#configuring-controllers 。例如

class Users::RegistrationsController < Devise::RegistrationsController
  def new
    super do |resource|
      resource.build_<model>
    end
  end
end

而且您只能resourceform_for:中指定,simple_form_for(resource, ...而不是simple_form_for([resource, Model.new], ...

于 2021-01-12T14:07:53.683 回答