Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计用户的配置文件模型?_Ruby On Rails_Authentication_Devise - Fatal编程技术网

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修改designe
registrations#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