【问题标题】:Adding name attribute to `User` in Devise在设计中向“用户”添加名称属性
【发布时间】:2011-10-28 11:28:40
【问题描述】:

我正在尝试向 Devise 提供的用户模型添加名称属性。我在我的数据库中添加了一个“名称”列,并更改了注册视图,以便它询问用户的名称:

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <p><%= f.label :name %><br />
  <%= f.text_field :name %></p>

  <p><%= f.label :email %><br />
  <%= f.email_field :email %></p>

  <p><%= f.label :password %><br />
  <%= f.password_field :password %></p>

  <p><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></p>

  <p><%= f.submit "Sign up" %></p>
<% end %>

<%= render :partial => "devise/shared/links" %>

它可以让我登录,但是当我这样做后检查数据库时,name: nil。我是否必须向 Devise 的 User 控制器添加一些东西?谢谢!

【问题讨论】:

  • 您是否还需要创建一个迁移,将“名称”添加到用户的数据库表中?

标签: ruby-on-rails attributes devise custom-attributes


【解决方案1】:

Rails 5(实际上设计了 4)

测试:rails 5.1.0(设计 4.2.1)

无需使用设计控制器。

只需将以下内容添加到您的application_controller.rb

before_action :configure_permitted_parameters, if:  :devise_controller?


protected

  def configure_permitted_parameters

    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])

  end

devise_parameter_sanitizer.for 不再适用于 Rails 5(更正确地说,它在设计 4 中不受支持,这是 Rails 5 上下文中预期的设计版本):使用devise_parameter_sanitizer.permit 避免undefined method 'for' for #&lt;Devise::ParameterSanitizer 错误

【讨论】:

    【解决方案2】:

    导轨 3

    在您的用户模型中定位;

     attr_accessible :email, :password, :password_confirmation, :remember_me
    

    并在末尾添加 :name

    【讨论】:

    • rails4 怎么样?因为没有这种 attr_accessible 的东西
    • @namiheike 目前不确定rails 4 的答案是什么,但快速解决方法是将gem 'protected_attributes' 添加到您的gemfile 中。然后你可以使用 attr_accessible
    • 对于具有强大参数的 Rails 4.0(及更新版本),请查看 RailsApps 项目中的 Rails and Devise 示例应用程序。
    【解决方案3】:
     private
    
       def sign_up_params
         params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present?
       end
    

    在扩展设计的默认注册控制器的控制器中添加这个

    【讨论】:

      【解决方案4】:

      取消注释一些生成的代码:

      class Users::RegistrationsController < Devise::RegistrationsController
        before_filter :configure_sign_up_params, only: [:create]
      
        protected
      
        def configure_sign_up_params
          devise_parameter_sanitizer.for(:sign_up) << :name
        end
      end
      

      【讨论】:

        【解决方案5】:

        在 ApplicationController 类中编写此代码...

        before_action :configure_permitted_parameters, if:  :devise_controller?
        
              protected
        
              def configure_permitted_parameters
                devise_parameter_sanitizer.for(:sign_up) << :name  
        

        【讨论】:

          【解决方案6】:

          将此代码添加到 application_controller.rb

          before_action :configure_permitted_parameters, if: :devise_controller?
          
          
          
          protected
          def configure_permitted_parameters
            devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
            devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
            devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
          end
          

          【讨论】:

            【解决方案7】:

            对于 Rails 4

            这样使用

            protected
            def configure_permitted_parameters
              devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
              devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
              devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
            end
            

            在末尾添加其他字段。

            【讨论】:

            【解决方案8】:

            是的。在用户模型中将:name 添加到attr_accessible

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-10-03
              • 2011-02-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多