Rails 4 + Devise 3.0.0添加用户名

我正在使用Rails 4和Devise 3.0.0,并且是使用这些新的强大参数的新手。 我使用Devise wiki上的文档为User模型添加了用户名。 我遇到的问题是Rails 4中强大的参数变化。

如何将:login属性添加到用户模型以启用用户名或电子邮件登录?

来自设备上的rails4自述文件: https : //github.com/plataformatec/devise/tree/rails4#strong-parameters

 class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :email) } end end 

@ justin.chmura

以下是我们最终如何使其发挥作用的要点。
https://gist.github.com/AJ-Acevedo/6077336

要点包含:
应用程序/控制器/ application_controller.rb
应用程序/模型/ user.rb
配置/初始化/ devise.rb

你应该确保包括

 attr_accessor :login 

在用户模型中。 我在这里找到了解释attr_accessible已被弃用的问题。

Rails 4 +设计使用电子邮件或用户名和强参数登录

attr_accessor和attr_accessible之间的区别

这就是我的app / models / user.rb文件的样子。

 class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable attr_accessor :login def self.find_first_by_auth_conditions(warden_conditions) conditions = warden_conditions.dup if login = conditions.delete(:login) where(conditions).where(["username = :value OR lower(email) = lower(:value)", { :value => login }]).first else where(conditions).first end end validates :username, :uniqueness => { :case_sensitive => false } end 

如果你在config/initializers添加一个模块,如下所示,它将正常工作,

文件config/initializers/devise_permitted_parameters.rb包含以下内容:

 module DevisePermittedParameters extend ActiveSupport::Concern included do before_filter :configure_permitted_parameters end protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) } end end DeviseController.send :include, DevisePermittedParameters