在我把Rails从SQLite迁移到SQL Server之前,我的设计工作得很好。迁移全部成功,并能够登录到Rails。但当我点击“注销”我得到下面的错误,
> NoMethodError in Devise::SessionsController#destroy undefined method
> `remember_created_at=' for #<User:0x00007fe169c25d10> Did you mean?
> remember_me=
Rails.root: /home/blacklight/projects/tth-blacklight
Application Trace | Framework Trace | Full Trace
activemodel (5.2.1) lib/active_model/attribute_methods.rb:430:in `method_missing'
devise (4.5.0) lib/devise/models/rememberable.rb:61:in `forget_me!'
devise (4.5.0) lib/devise/controllers/rememberable.rb:32:in `forget_me'
devise (4.5.0) lib/devise/hooks/forgetable.rb:9:in `block in <main>'
warden (1.2.7) lib/warden/hooks.rb:15:in `block in _run_callbacks'
warden (1.2.7) lib/warden/hooks.rb:10:in `each'
warden (1.2.7) lib/warden/hooks.rb:10:in `_run_callbacks'
warden (1.2.7) lib/warden/manager.rb:52:in `_run_callbacks'
warden (1.2.7) lib/warden/proxy.rb:263:in `block in logout'
db/migrate/2018.. add_devise_to users.rb
class AddDeviseToUsers < ActiveRecord::Migration[5.2]
def self.up
change_table :users do |t|
t.string :email, null: true
end
add_index :users, :email, unique: true
end
def self.down
raise ActiveRecord::IrreversibleMigration
end
end
db/Schema.rb
ActiveRecord::Schema.define(version: 2018_11_15_061838) do
create_table "bookmarks", id: :integer, force: :cascade do |t|
t.integer "user_id", null: false
t.string "user_type"
t.string "document_id"
t.string "document_type"
t.binary "title"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["document_id"], name: "index_bookmarks_on_document_id"
t.index ["user_id"], name: "index_bookmarks_on_user_id"
end
create_table "searches", id: :integer, force: :cascade do |t|
t.binary "query_params"
t.integer "user_id"
t.string "user_type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_searches_on_user_id"
end
create_table "users", force: :cascade do |t|
t.boolean "guest", default: false
t.string "email"
t.index ["email"], name: "index_users_on_email", unique: true
end
end
我不知道我该看什么或者看哪里。我是新手,所以简单的解释会很有帮助。谢谢
2条答案
按热度按时间vx6bjr1n1#
我不确定迁移是否真的导致了这个问题,但我了解到model/user.rb中的 :rememberable 选项负责创建时间和管理 remember_created_at。而且我在登录用户时没有记住我复选框。所以我完全删除了:可记住的选项。为了确保用户在一段时间后退出,包括 :timeoutable 选项
lxkprmvk2#
您需要修改
lib/devise/models/rememberable.rb
中的forget_me
函数。删除或注解此行:
并添加这一行:
它应该看起来像这样: