将可追踪(设计)添加到现有用户模型?

时间:2018-12-02 09:54:38

标签: ruby-on-rails ruby devise

问题:我以前创建的用户模型的设计信息最少。我看到devise具有一个“可跟踪”系统,并希望将其实现到现有模型中。我加了:

class AddSignInCountToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :sign_in_count, :integer
  end
end

要测试迁移,它将无法正常工作。 (我还尝试使用“默认值:0,null:false”进行此迁移,结果相同。

一旦在设计模型中添加“:trackable”,问题似乎就会发生。

我登录时收到此错误:

NoMethodError in Devise::SessionsController#create
undefined method `current_sign_in_at' for #<User:0x00007f484e5ef770>
#line with red highlight
        match ? attribute_missing(match, *args, &block) : super

CMD错误前几行

NoMethodError (undefined method `current_sign_in_at' for #<User:0x00007f484e5ef770>):

activemodel (5.2.1) lib/active_model/attribute_methods.rb:430:in `method_missing'

路线:

  devise_for :users, controllers: { confirmations: 'confirmations' }

型号:

  devise :database_authenticatable, :registerable,
          :confirmable, :recoverable, :rememberable, :validatable, :trackable

        def active_for_authentication?
          super && approved
        end

        def inactive_message
          approved? ? super : :not_approved
        end
...
...
...

这是一个设计问题,还是其他原因造成的?

这个问题也可能是由于现有模型(不确定为什么会如此,但以防万一),因为如果是这样,我可以重写t并重新创建它,因为它仍在开发中。

我想利用所有Devise提供的功能,并希望将其余的devise功能迁移到我的模型中。有一个或两个建议吗?

2 个答案:

答案 0 :(得分:1)

Trackable模块期望的不仅仅是sign_in_count属性。 列出了必填列的完整列表in the documentation 如果您为其余的列添加另一个迁移,则所有操作均应按预期进行。

答案 1 :(得分:0)

答案:

(在SO NoMethodError in Devise::SessionsController#create undefined method `current_sign_in_at'上不久发现此问题)

答案被授予绿色复选标记。

我首先尝试仅添加可跟踪的内容,但由于某种原因(无法保存错误)而无法正常工作

但他们的第一个recc例如使用:

rake db:migrate:down VERSION=20140126101944 # use version of the user migration
rake db:migrate up VERSION=20140126101944 # use version of the user migration

我遇到的唯一问题是我添加到用户表中的所有其他迁移都没有随之迁移(名称等),因此我不得不重新迁移所有内容。

为了澄清,正如其他人建议的那样,我需要更多的列而不只是可跟踪工作的列。所以这可能是这里的整体问题。