ruby on rails-如何在注册期间构建一个设计嵌套资源



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

我的家庭模型:

belongs_to user

我的用户模型:

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

在design/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>

家庭是一个没有任何电子邮件,只有一个名字的模式。我只需要能够在创建新用户时创建一个具有名称的新族对象(并将其链接到用户)。

更新2

我已在注册控制器中添加了resource.build_family。族对象已正确创建并与用户关联(我可以在new.html.erb中显示<%=resource.family%>进行调试),但仍然没有显示族的窗体。

您需要<%中的等号=的字段

<%= 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

如果您正在获得undefined method 'email' for #<Model:0x007f892a12c310>:

您需要覆盖Devise::RegistrationsController,如文档中所述:https://github.com/heartcombo/devise#configuring-控制器。例如

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

并且必须仅在form_for:simple_form_for(resource, ...中指定resource,而不是simple_form_for([resource, Model.new], ...

相关内容

  • 没有找到相关文章

最新更新