ruby-on-rails rails - devise - undefined方法'remember_created_at'当注销时

dauxcl2d  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(182)

在我把Rails从SQLite迁移到SQL Server之前,我的设计工作得很好。迁移全部成功,并能够登录到Rails。但当我点击“注销”我得到下面的错误,

  1. > NoMethodError in Devise::SessionsController#destroy undefined method
  2. > `remember_created_at=' for #<User:0x00007fe169c25d10> Did you mean?
  3. > remember_me=
  4. Rails.root: /home/blacklight/projects/tth-blacklight
  5. Application Trace | Framework Trace | Full Trace
  6. activemodel (5.2.1) lib/active_model/attribute_methods.rb:430:in `method_missing'
  7. devise (4.5.0) lib/devise/models/rememberable.rb:61:in `forget_me!'
  8. devise (4.5.0) lib/devise/controllers/rememberable.rb:32:in `forget_me'
  9. devise (4.5.0) lib/devise/hooks/forgetable.rb:9:in `block in <main>'
  10. warden (1.2.7) lib/warden/hooks.rb:15:in `block in _run_callbacks'
  11. warden (1.2.7) lib/warden/hooks.rb:10:in `each'
  12. warden (1.2.7) lib/warden/hooks.rb:10:in `_run_callbacks'
  13. warden (1.2.7) lib/warden/manager.rb:52:in `_run_callbacks'
  14. warden (1.2.7) lib/warden/proxy.rb:263:in `block in logout'

db/migrate/2018.. add_devise_to users.rb

  1. class AddDeviseToUsers < ActiveRecord::Migration[5.2]
  2. def self.up
  3. change_table :users do |t|
  4. t.string :email, null: true
  5. end
  6. add_index :users, :email, unique: true
  7. end
  8. def self.down
  9. raise ActiveRecord::IrreversibleMigration
  10. end
  11. end

db/Schema.rb

  1. ActiveRecord::Schema.define(version: 2018_11_15_061838) do
  2. create_table "bookmarks", id: :integer, force: :cascade do |t|
  3. t.integer "user_id", null: false
  4. t.string "user_type"
  5. t.string "document_id"
  6. t.string "document_type"
  7. t.binary "title"
  8. t.datetime "created_at", null: false
  9. t.datetime "updated_at", null: false
  10. t.index ["document_id"], name: "index_bookmarks_on_document_id"
  11. t.index ["user_id"], name: "index_bookmarks_on_user_id"
  12. end
  13. create_table "searches", id: :integer, force: :cascade do |t|
  14. t.binary "query_params"
  15. t.integer "user_id"
  16. t.string "user_type"
  17. t.datetime "created_at", null: false
  18. t.datetime "updated_at", null: false
  19. t.index ["user_id"], name: "index_searches_on_user_id"
  20. end
  21. create_table "users", force: :cascade do |t|
  22. t.boolean "guest", default: false
  23. t.string "email"
  24. t.index ["email"], name: "index_users_on_email", unique: true
  25. end
  26. end

我不知道我该看什么或者看哪里。我是新手,所以简单的解释会很有帮助。谢谢

vx6bjr1n

vx6bjr1n1#

我不确定迁移是否真的导致了这个问题,但我了解到model/user.rb中的 :rememberable 选项负责创建时间和管理 remember_created_at。而且我在登录用户时没有记住我复选框。所以我完全删除了:可记住的选项。为了确保用户在一段时间后退出,包括 :timeoutable 选项

lxkprmvk

lxkprmvk2#

您需要修改lib/devise/models/rememberable.rb中的forget_me函数。
删除或注解此行:

  1. self.remember_created_at = nil if self.class.expire_all_remember_me_on_sign_out

并添加这一行:

  1. self.remember_me = nil if self.class.expire_all_remember_me_on_sign_out

它应该看起来像这样:

  1. def forget_me!
  2. return unless persisted?
  3. self.remember_token = nil if respond_to?(:remember_token)
  4. self.remember_me = nil if self.class.expire_all_remember_me_on_sign_out
  5. #self.remember_created_at = nil if self.class.expire_all_remember_me_on_sign_out
  6. save(validate: false)
  7. end
展开查看全部

相关问题