Devise中的NameError :: SessionsController #create

时间:2014-05-24 21:13:15

标签: ruby-on-rails ruby validation devise

我正在尝试使用:lockable,因此当我将其添加到class User < ActiveRecord::Base并尝试登录或登录时。我重定向到错误页面。这是我得到的

NameError in Devise::SessionsController#create
undefined local variable or method `locked_at' for #<User:0x000001025a56d8>

Rails.root: /Users/user/Ruby

Application Trace | Framework Trace | Full Trace
Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"dsfgsgfddsfgt5467657654n74=",
 "user"=>{"email"=>"email@email.com",
 "password"=>"[FILTERED]"},
 "commit"=>"Sign in"}
Toggle session dump
Toggle env dump
Response

Headers:

None

有什么想法吗?当我删除:lockable时,一切正常

2 个答案:

答案 0 :(得分:0)

设计需要datetime :locked_at字段。你必须错过它。

更新:

包含此迁移,因为您的user表中似乎没有相应的字段。

这样做

  1. rails g migration add_devise_required_missing_fields

  2. 打开生成的迁移文件并粘贴此

    change_table(:users) do |t|
      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable
    
     ## Lockable
      t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      t.string   :unlock_token # Only if unlock strategy is :email or :both
      t.datetime :locked_at
    end 
    add_index :users, :unlock_token,         unique: true
    
  3. 最后,运行rake db:migrate

答案 1 :(得分:0)

有两种可能的错误,

  1. 您可能错过了启用需要设计可锁定功能的字段

    ##可锁定

    #t.integer:failed_attempts,默认值:0,null:false#仅当锁定策略为:failed_attempts

    #t.string:unlock_token#仅当解锁策略为:email或:both

    #t.datetime:locked_at

  2. 您必须启用和迁移用户(如果您应用设计用户模型)表中所需的这三个输入。

    1. 您可以使用rake db:setup命令来创建,迁移和种子数据库。这是正确的,但您必须检查db / schema.rb文件中是否有这三个字段,因为db:setup命令将检查模式文件并运行迁移。可能是使用同一项目的其他联合开发人员添加该字段并忘记将schema.rb更改上传到git / bitbucket。