设计 - 在注册期间将数据插入HAS_ONE相关模型

时间:2014-01-29 21:48:13

标签: ruby-on-rails

我有一个用户模型,即has_one个人资料。

个人资料是保存所有用户资料的地方(姓名,电话,地址,州等)。

在注册过程中,我需要让用户填写这些字段。

试图做嵌套字段,但它并没有真正起作用,我真的不明白为什么。

有没有人有类似的代码示例?在互联网上找不到任何东西。

Candidate has_one :profile
Profile belongs_to :user

报名表:

= simple_form_for(:candidate,
                          as: Candidate,
                          url: candidate_registration_path) do |f|
          = f.simple_fields_for :profile do |profile|
            = profile.input :first_name
            = profile.input :last_name
          = f.input :email
          = f.input :password
          = f.input :password_confirmation
          = f.submit 'Start Building', class: 'btn btn-primary'

除了这个以外,没有对控制器做任何事情:

def configure_devise_params
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:email, :password, :password_confirmation,
               profile_attributes: [:first_name, :last_name])
    end
  end

2 个答案:

答案 0 :(得分:0)

当你说它不起作用时你的意思是它不能保存吗?或者它没有显示字段?

在后一种情况下,您必须在命中操作之前在注册控制器中构建空白配置文件。所以基本上覆盖设计控制器并执行以下操作:

class RegistrationsController < Devise::RegistrationsController

  def new
    user = build_resource({})
    user.build_profile if user.profile.blank?
    respond_with self.resource
  end

end

的routes.rb

  devise_for :candidates, :controllers => {:registrations => "registrations"}

Candidate.rb

has_one :profile
accepts_nested_attributes_for :profile

并确保您在上面为强参数编写的代码位于application_controller中。

这也假设您的设计模型被称为“候选人”

答案 1 :(得分:0)

检查日志中的参数。尝试使用这些参数在控制台中创建用户。您的用户模型上有accepts_nested_attributes_for :profile吗?