当我尝试调用ActiveRecord
方法select
时,我的两个Rails模型只返回错误object doesn't support #inspect
这些模型使用after_initialize
回调,因此我怀疑它与此有关。
我正在使用after_initialize
这样的回调:
enum state: [ :archived, :active ]
after_initialize :state_init
after_initialize :date_init
def state_init
self.state ||= :active
end
def date_init
self.report_date ||= self.event ? self.event.event_date : Date.current
end
我需要使用select
方法选择按月分组的记录,其中包含一个日期为Postgres的字段
ModelName.select("date_trunc( 'month', report_date ) as month, count(*) as count").group('month')
有没有办法解决这个问题?
答案 0 :(得分:1)
基本上,after_initialize方法的问题是当你只选择模型的列子集时,如果你的after_initialize方法/块访问了一个未包含在select子句中的列,你将得到一个MissingAttributeError。 / p>
其中一个快速解决方案就是在select子句中包含这些列。但由于这不是正确的解决方案。你可以通过告诉进程在没有持久化记录的情况下初始化它来修复它,如下所示:
after_initialize :state_init, unless: :persisted?
after_initialize :date_init, unless: :persisted?
def state_init
self.state ||= :active
end
def date_init
self.report_date ||= self.event ? self.event.event_date : Date.current
end
答案 1 :(得分:0)
我正面临与你类似的问题。
最后,我决定删除 after_initialize 方法,并在db(migration)中设置默认值。
希望这有帮助。