枚举字段未正确检索ActiveRecord

时间:2019-05-03 16:04:52

标签: ruby-on-rails ruby activerecord enums

在Rails应用程序中使用ActiveRecord枚举时遇到一些问题。

上下文:枚举字段表示对象的status,为简单起见,我包含了与该问题有关的代码段:

class Issue < ApplicationRecord
  enum status: %i[open in_progress closed rejected]
  has_many_attached :files
  belongs_to :issuer, class_name: 'User', foreign_key: :issuer_id

  validates_presence_of :title, :description, :issuer, :issued_at, :updated_at

  after_initialize do |issue|
    issue.issued_at = DateTime.now
    issue.updated_at = issue.issued_at
    issue.status = :open
  end

  after_update do |issue|
    issue.updated_at = DateTime.now
  end
end

我正在写一些规范,并且我注意到,每当我尝试使用ActiveRecord的API(例如Model.all)来获取模型时,每条记录都带有第一个状态(open)。查询数据库时,与此模型相关的表包含为存储在数据库中的对象设置的状态。

从表映射到模型时,ActiveRecord似乎遇到了一些麻烦,反之亦然。有什么想法可以导致这种行为?

我正在使用PostgreSQL作为数据库和Rails 5.2.2

谢谢!

1 个答案:

答案 0 :(得分:0)

您在after_initialize块中添加了issue.status = :open。每次初始化对象时都会调用此方法。每次初始化该对象后,其Model.createModel.newModel.findModel.all都将其状态改写为:open。模型初始化后的用户不是一个好主意。对于许多我想初始化任何新对象的地方,我为column或before_validation回调设置了默认值。