Ruby on rails 轨道&x2B;设计错误的符号

Ruby on rails 轨道&x2B;设计错误的符号,ruby-on-rails,authentication,devise,Ruby On Rails,Authentication,Devise,设计投掷: "NoMethodError (undefined method `login' for #<ActionDispatch::Request:0x00000004e42d80>): " 在会话\u controller.rb中,我在\u filter之前使用了: def configure_permitted_parameters devise_parameter_sanitizer.for(:user) { |u| u.permit(:login, :pa

设计投掷:

"NoMethodError (undefined method `login' for #<ActionDispatch::Request:0x00000004e42d80>):
"
在会话\u controller.rb中,我在\u filter之前使用了

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:user) { |u| u.permit(:login, :password) }
  end
和我的
路线.rb

devise_for :users, :controllers => { :sessions => 'sessions', :registrations => 'registrations', :invitations => 'users/invitations'}
这个问题在从Rails 3升级到Rails 4之后出现。 有人能解释一下我做错了什么吗

更新

我的错。在我的同事设置的Desive初始值设定项中发现错误的参数。 无论如何,我有错误消息:

NameError (undefined local variable or method `invitation_token' for #<User:0x0000000286c750>):
  app/controllers/sessions_controller.rb:6:in `create'
更新

废话。我的同事还将database.yml更改为另一个DB。因此,此数据库未迁移到最后一个状态=。rake db之后:迁移所有工作正常。感谢大家。

根据这一点,您应该在用户模型中创建一个登录虚拟属性

#通过用户名或电子邮件进行身份验证的虚拟属性

#这是对真正的持久化字段(如“用户名”)的补充。

attr\u访问者:登录

还可以将登录添加到rails 3可访问的attr_

attr_accessible :login
您可能还需要在用户模型中覆盖Desive的find_for_database_身份验证方法 (假设它是activerecord)

您可能需要修改config/initializers/designe.rb以使

config.reset_password_keys = [ :login ]
config.confirmation_keys = [ :login ]

这里的基本问题通常是Desive的不可侵犯代码是通过Desive工作流程中的第二步生成的,这是进行第二次迁移的生成器:

$ rails g devise_invitable:install
$ rails g devise_invitable User   (where User is my Model)
$ rake db:migrate

您需要检查的是两个迁移是否同步(在我的情况下,我重新运行了用户迁移,但没有不可侵犯的迁移,因此我的用户表不正确)。

发布您的会话视图newRajarshi,我的应用程序与API一样工作。表已经具有真实属性“login”,所以我认为不需要同名的虚拟属性。没错。您能否尝试此
“为(:用户)设计参数消毒器”
->
为(:登录)
在会话中\u controller.rb I将所有参数包装为“用户”
# app/models/user.rb

    def self.find_first_by_auth_conditions(warden_conditions)
      conditions = warden_conditions.dup
      if login = conditions.delete(:login)
        where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
      else
        where(conditions).first
      end
    end
config.reset_password_keys = [ :login ]
config.confirmation_keys = [ :login ]
$ rails g devise_invitable:install
$ rails g devise_invitable User   (where User is my Model)
$ rake db:migrate