【问题标题】:How to add username field to devise gem?如何添加用户名字段来设计 gem?
【发布时间】:2014-01-31 10:41:08
【问题描述】:

这是我尝试过的,

  1. rails g migration add_username_to_hrs

  2. bundle exec rake db:migrate

  3. 添加了attr_accessible:username

  4. 重启服务器

我的 add_username_to_hr.rb

class AddUsernameToAuthorize < ActiveRecord::Migration
 def change
    add_column :authorizes, :username, :string
 end
end

错误

# 的未定义方法“用户名”

问题:如何在我的设计 gem 中添加用户名字段?

【问题讨论】:

  • 你的意思是在使用 devise 的时候要在登录表单中有一个用户名输入字段吗?
  • 步骤是正确的。启动服务器时出现什么问题?

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

答案现已过时 [适用于 rails4]

我也做过同样的事情。请按照以下步骤操作:

  1. rails generate migration add_username_to_users username:string:uniq

  2. rake db:migrate

  3. 添加attr_accessible :username

  4. 在 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 
    
  5. 在配置/初始化程序中如果你想用usernname替换email

    config.authentication_keys = [ :username ]
    config.case_insensitive_keys = [ :username ]  
    config.strip_whitespace_keys = [ :username ]
    
  6. 更新视图。

注意如果attr_accessible :username给出错误尝试attr_accessor :username

【讨论】:

  • 当心 rails 5 用户,这个答案现在已经过时了。按照@Jakob W.Here it is too 提供的 wiki 链接,以防万一。
【解决方案2】:

如果您使用的是 rails 4,则将以下代码放入应用程序控制器中

class ApplicationController < ActionController::Base
 before_action :configure_permitted_parameters, if: :devise_controller?

 protected

 def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << :username
 end
end

【讨论】:

    【解决方案3】:

    如果您使用的是 rails 4,请按照以下步骤操作:

    1. rails g migration AddUserNameToAuthorize

    2. rake db:migrate

    3. 将此代码放入application_controller.rb 以接受sign_insign_upaccount_update 的用户名参数:

      class ApplicationController < ActionController::Base
          protect_from_forgery with: :exception
          def configure_permitted_parameters
            devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email, :password,:username) }
            devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation,:username) }
            devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation,:username) }
          end
      end
      

    【讨论】:

      【解决方案4】:

      设计实际上将字段添加到您在设计设置期间指定的模型。如果您已向该模型添加迁移。例如,您使用了用户模型的设计,那么您可以生成迁移以将用户名添加到用户模型并运行 db:migrate 并将 attr_accessible :username 添加到模型,如果您使用的是 rails

      【讨论】:

        【解决方案5】:

        您必须在下面命令中给出的模型中添加用户名

        rails g devise <modelname>
        

        完成后,您需要按照上述步骤操作,但需要修改设计配置文件以查找用于登录的用户名而不是电子邮件。然后重启rails server应该没问题了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-29
          • 1970-01-01
          • 2020-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-03
          相关资源
          最近更新 更多