在注册时创建用户配置文件添加配置文件表单字段以设计注册#new form

时间:2011-09-30 09:37:26

标签: ruby-on-rails devise registration profile creation

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

  • 用户has_one个人资料
  • 个人资料belongs_to user
  • 推翻了devise registration_controller
  • 自定义注册视图一切正常,注册工作正常

现在我想补充一下:

  • 在注册页面上,我想添加个人资料中的字段,例如名字,姓氏
  • 目前还没有用户,在提交表单
  • 时会创建
  • 我需要使用此名字创建个人资料,最后一个

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

我的注册#new 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

2 个答案:

答案 0 :(得分:5)

我认为问题在于,在呈现表单时该用户上不存在任何配置文件,一种简单的方法可以在渲染字段之前在内存中构建它:

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

答案 1 :(得分:2)

除了Nesbitt的解决方案,请将其添加到您的模型

attr_accessible ..., :profile_attributes
相关问题