Ruby on rails 轨道4+;设计3.0.0添加用户名

Ruby on rails 轨道4+;设计3.0.0添加用户名,ruby-on-rails,devise,strong-parameters,Ruby On Rails,Devise,Strong Parameters,我正在使用Rails 4和Desive 3.0.0,并且对使用这些新的强参数还不熟悉。我使用添加到用户模型的用户名。我遇到的问题是Rails 4中的参数变化很大 如何将:login属性添加到用户模型中,以便使用用户名或电子邮件登录?来自rails4自述设备: class ApplicationController{ :区分大小写=>false } 结束 如果您在配置/初始值设定项中添加一个模块,并使用以下所有参数,则可以正常工作 包含以下内容的文件config/initializers/desi

我正在使用Rails 4和Desive 3.0.0,并且对使用这些新的强参数还不熟悉。我使用添加到用户模型的用户名。我遇到的问题是Rails 4中的参数变化很大


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

来自rails4自述设备:

class ApplicationController
@justin.chmura

以下是我们最终如何使其工作的要点。

要点包括:
app/controllers/application\u controller.rb
app/models/user.rb

config/initializers/designe.rb

您应该确保包括

attr_accessor :login
在用户模型中。在这里,我发现了一个问题,说明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
class用户login}])
其他的
在哪里(条件)。首先
结束
结束
验证:用户名,
:唯一性=>{
:区分大小写=>false
}
结束

如果您在
配置/初始值设定项
中添加一个模块,并使用以下所有参数,则可以正常工作

包含以下内容的文件
config/initializers/designe\u allowed\u 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

只是为了扩展一下,我想找到一个我可以使用的解决方案,它不涉及重用
protected\u属性
gem。如果在这种情况下可能的话,很好!我想我应该更仔细地阅读文档。:)我补充说,这似乎有帮助。现在我得到了用户的
未定义的方法“login”。我想我还需要为登录页面添加其他内容来识别登录属性。哦,对不起,你说的是在模型中添加“用户名”。将:login替换为:username
:login
属性仅在登录页面上用于保存用户键入的用户名或电子邮件以进行登录。我可能需要重写会话控制器才能使其正常工作。@justin.chmura如果还有什么需要帮助的,请告诉我。否则,请标记为已接受。@AJ。老实说,我只是回到了Rails 3,直到Rails 4变得更加充实。我尝试的一切都不起作用,所以我现在放弃了:)
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