【问题标题】:enum field not being properly retrieved ActiveRecord未正确检索枚举字段 ActiveRecord
【发布时间】:2019-05-03 16:04:52
【问题描述】:

我在 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

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby activerecord enums


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多