我正在尝试使用: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
时,一切正常
答案 0 :(得分:0)
设计需要datetime :locked_at
字段。你必须错过它。
更新:
包含此迁移,因为您的user
表中似乎没有相应的字段。
这样做
rails g migration add_devise_required_missing_fields
打开生成的迁移文件并粘贴此
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
最后,运行rake db:migrate
答案 1 :(得分:0)
有两种可能的错误,
您可能错过了启用需要设计可锁定功能的字段
##可锁定
#t.integer:failed_attempts,默认值:0,null:false#仅当锁定策略为:failed_attempts
#t.string:unlock_token#仅当解锁策略为:email或:both
时#t.datetime:locked_at
您必须启用和迁移用户(如果您应用设计用户模型)表中所需的这三个输入。