在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
谢谢!
答案 0 :(得分:0)
您在after_initialize块中添加了issue.status = :open
。每次初始化对象时都会调用此方法。每次初始化该对象后,其Model.create
或Model.new
或Model.find
或Model.all
都将其状态改写为:open。模型初始化后的用户不是一个好主意。对于许多我想初始化任何新对象的地方,我为column或before_validation回调设置了默认值。