我有一个用户模型,即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
答案 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
吗?