【发布时间】:2018-01-22 08:35:11
【问题描述】:
我正在尝试查找去年设置为特定状态的所有项目。 我正在使用经过审计的 Rail 5,所以我创建了一个特定的审计模型,并尝试编写一个范围来返回我的条件:
Audit = Audited.audit_class
class Audit
scope :followupRebus, -> { where(auditable_type: 'Followup')
.where(action: 'update')
.where("audited_changes LIKE '%step_id:[#{Step::REBUS}%'")
}
end
当我拿它并用.to_s 显示它时,postgres 中审核的文本字段的内容看起来像这样
{"step_id"=>[9, 4], "active"=>[false, true]}
如何使用 step_id = 9 进行所有审核?
编辑
非常感谢DRSE,我终于找到了一个可行的解决方案:
- 使用 DRSE 发送的迁移更改列的默认 TEXT 类型
-
像这样改变请求:
类审计 范围:followupRebus,-> { where(auditable_type: 'Followup') .where(动作:'更新') .where("((audited_changes -> 'step_id')::json->>0)::int = :step_id", step_id: Step::REBUS) }
结束
【问题讨论】:
-
你关心以前的版本或更新的版本是否有
step_id = 9?在您的示例中"step_id"=>[9, 4]这表明您的模型的先前版本具有step_id = 9因为9是数组中的第一个元素。 -
是的,它应该是 +,但它对我的需求至关重要
-
我在下面的回答中包含了所有案例。
标签: ruby-on-rails postgresql acts-as-audited