Skip to main content
 首页 » 编程设计

ruby-on-rails之在注册时创建用户个人资料添加个人资料表单字段以设计注册#new form

2025年12月25日20kevingrace

我有一个带有设计的 Rails 3.1 应用程序:

  • 用户有_一个个人资料
  • 个人资料属于_用户
  • 否决了设计 registration_controller
  • 自定义注册 View 一切正常,注册工作正常

现在我想补充一点:

  • 我想在注册页面上添加个人资料中的字段,例如名字、姓氏
  • 还没有用户,将在提交表单时创建
  • 我需要用名字和姓氏创建个人资料

我该怎么做?我尝试了几个想法,也来自堆栈溢出,但似乎无法让它工作。我尝试了嵌套属性,但这种方法不起作用,会在用户注册时在数据库中创建配置文件记录,插入名字和姓氏

我的注册#新 View :

= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| 
 
    = devise_error_messages! 
 
    = f.input :username,                  :label => 'Username' 
    = f.input :email,                     :label => 'Email' 
    = f.input :password,                  :label => 'Password' 
    = f.input :password_confirmation,     :label => 'Password confirm' 
 
    // start fields for profile 
    = f.fields_for :profile do |f| 
      = f.label :bod_day 
      = f.text_field :bod_day 
    // end fields for profile 
 
 
    = f.button :submit, t(:submit, :scope => :register) 

在我的用户模型中我有这个:

  accepts_nested_attributes_for :profile 

请您参考如下方法:

我认为问题是在呈现表单时该用户不存在个人资料,解决这个问题的一种简单方法可能是在呈现字段之前在内存中构建它,如下所示:

= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| 
 
    = devise_error_messages! 
 
    = f.input :username,                  :label => 'Username' 
    = f.input :email,                     :label => 'Email' 
    = f.input :password,                  :label => 'Password' 
    = f.input :password_confirmation,     :label => 'Password confirm' 
 
    // make a new profile in memory 
    = resource.build_profile 
 
    // start fields for profile 
    = f.fields_for :profile do |f| 
      = f.label :bod_day 
      = f.text_field :bod_day 
    // end fields for profile 
 
 
    = f.button :submit, t(:submit, :scope => :register)