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

时间:2014-01-31 10:41:09

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

这是我尝试过的,

  1. rails g migration add_username_to_hrs

  2. bundle exec rake db:migrate

  3. 添加了attr_accessible:username

  4. 重新启动服务器

  5. 我的add_username_to_hr.rb

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

    错误

      

    的未定义方法`username'

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

6 个答案:

答案 0 :(得分:9)

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

  1. rails generate migration add_username_to_users username:string:uniq

  2. rake db:migrate

  3. 添加attr_accessible :username

  4. application_controller.rb中的
  5. 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 
    
  6. 在配置/初始化程序中,如果您想要email替换usernname

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

  8. 注意如果attr_accessible :username错误,请尝试attr_accessor :username

答案 1 :(得分:8)

devise wiki有一个指南允许用户使用用户名登录,也许它可以帮助您?

答案 2 :(得分: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

答案 3 :(得分:4)

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

  1. rails g migration AddUserNameToAuthorize

  2. rake db:migrate

  3. 将此代码放入application_controller.rb以接受sign_insign_up以及account_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 :(得分:2)

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

答案 5 :(得分:2)

您必须在下面的命令

中给出的模型中添加用户名
rails g devise <modelname>

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