Ruby on rails 设计用户的配置文件模型?
我想延长我的设计安装的注册表格。我创建了一个概要文件模型,现在我在问自己,如何将表单的特定数据添加到此模型中。装置的Ruby on rails 设计用户的配置文件模型?,ruby-on-rails,authentication,devise,Ruby On Rails,Authentication,Devise,我想延长我的设计安装的注册表格。我创建了一个概要文件模型,现在我在问自己,如何将表单的特定数据添加到此模型中。装置的UserController位于何处 提前谢谢 您的问题不太清楚,但我假设您的设计模型是User,您创建了另一个属于User的模型Profile 您需要使用rails g controller users为您的用户模型创建一个控制器 您还需要使用rails-generate-designe:views为用户生成视图 这样,用户可以在创建帐户时添加个人资料信息 从这里开始,它就像任何
UserController
位于何处
提前谢谢 您的问题不太清楚,但我假设您的设计模型是
User
,您创建了另一个属于User的模型Profile
您需要使用rails g controller users
为您的用户模型创建一个控制器
您还需要使用rails-generate-designe:views为用户生成视图
这样,用户可以在创建帐户时添加个人资料信息
从这里开始,它就像任何其他模型一样:创建一个用户和配置文件实例,并将两者链接起来。然后,在控制器中,使用current_user.profile
访问当前用户的配置文件
请注意,如果要以这种方式管理用户,则需要从
用户
模型(也可读取)中删除:registerable
模块假设您有一个具有has\u one
配置文件关联的用户模型,只需允许用户中的嵌套属性并修改设计注册视图
运行rails生成designe:views
命令,然后使用form helper的fields\u修改designeregistrations#new.html.erb
视图,如下所示,使您的注册表单随用户模型一起更新您的配置文件模型
<div class="register">
<h1>Sign up</h1>
<% resource.build_profile %>
<%= form_for(resource, :as => resource_name,
:url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<h2><%= f.label :email %></h2>
<p><%= f.text_field :email %></p>
<h2><%= f.label :password %></h2>
<p><%= f.password_field :password %></p>
<h2><%= f.label :password_confirmation %></h2>
<p><%= f.password_field :password_confirmation %></p>
<%= f.fields_for :profile do |profile_form| %>
<h2><%= profile_form.label :first_name %></h2>
<p><%= profile_form.text_field :first_name %></p>
<h2><%= profile_form.label :last_name %></h2>
<p><%= profile_form.text_field :last_name %></p>
<% end %>
<p><%= f.submit "Sign up" %></p>
<br/>
<%= render :partial => "devise/shared/links" %>
<% end %>
</div>
注册
资源名称,
:url=>注册路径(资源名称))do | f |%>
“设计/共享/链接”%>
在您的用户模型中:
class用户
为了补充mbreining的答案,在Rails 4.x中,您需要使用它来允许存储嵌套属性。创建注册控制器子类:
RegistrationsController < Devise::RegistrationsController
def sign_up_params
devise_parameter_sanitizer.sanitize(:sign_up)
params.require(:user).permit(:email, :password, profile_attributes: [:first_name, :last_name])
end
end
RegistrationController
另一种避免将建筑资源置于视图中的方法是重写Desive controller,准确地说,新方法就是,您只需将其更改为:
def new
build_resource({})
resource.build_profile
respond_with self.resource
end
我建议您查看同一问题的最新答案,并使用Rails 4+Desive非常简单的解决方案,谢谢!需要考虑的一点是:在视图中构建概要文件是否有点脏?这只是因为我们无法轻松编辑Desive Sign up控制器,或者我可能太挑剔了?:-)不,你不太挑剔。:)我同意你的看法,通常你会在控制器中创建一个新的模型实例,而不是在视图中。但正如您所提到的,由于Desive controller需要更新,在这种情况下,最简单的解决方案是在视图中执行此操作。要完成此回答,请不要忘记添加您的用户模型:attr\u accessible:profile\u attributes和accepts\u nested\u attributes\u for:profile(credit here:)实际上应该是,否则,您将无法在表单失败时填写传递的值。仅供参考。在Rails 4中,attr\u accessible
是从Rails中提取到gem中的,是首选方法。您必须将gem“protected\u attributes”
添加到gem文件中才能使用旧方法。为什么要创建另一个模型配置文件?为什么不把所有的东西都放在用户界面上呢?@预先分离关注点。您需要为所有与用户帐户相关的内容设置帐户或用户模型,并为个人配置文件数据设置配置文件模型。您可能还需要允许用户拥有一个非常全面的配置文件,并且您不希望创建一个50多个字段的表。
def new
build_resource({})
resource.build_profile
respond_with self.resource
end