如何添加用户名字段来设计gem?

bin*_*att 9 ruby-on-rails devise ruby-on-rails-4

这是我试过的,

  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
Run Code Online (Sandbox Code Playgroud)

错误

#的未定义方法`username'

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

Jak*_*b W 9

设计维基上有一个指南,允许用户使用用户名登录,也许它可以帮助你?


小智 9

我做了同样的事情.请按以下步骤操作:

  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 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在config/initializers中如果要替换emailusernname

    config.authentication_keys = [ :username ]
    config.case_insensitive_keys = [ :username ]  
    config.strip_whitespace_keys = [ :username ]
    
    Run Code Online (Sandbox Code Playgroud)
  6. 更新视图.

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

  • 当心 rails 5 用户,这个答案现在已经过时了。按照@Jakob W 提供的 wiki 链接。 [这里也是](https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-用户名或电子邮件地址),以防万一。 (3认同)

Div*_*ara 5

如果您使用的是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
Run Code Online (Sandbox Code Playgroud)