我在我的项目中使用Papertrail gem并进行了广泛搜索,尝试找到如何执行以下操作。
我想要做的是找到我的对象的版本,其中特定属性变为特定值,即
object.versions.where(attribute: "value")
有人知道Papertrail是否可以实现这一目标吗?
答案 0 :(得分:8)
以下内容获取attribute
成为value
的所有版本(在大多数应用中可能大约为1):
object.versions.
map(&:object_changes).
map{|a| YAML::load a}.
select{|a| (a[:attribute] || [])[1]=='value'}
结果如下:
[{"attribute"=>[nil, "value"],
"updated_at"=>[2015-01-02 12:20:36 UTC, 2015-01-02 12:20:56 UTC]}]
updated_at[1]
值表示attribute
何时成为value
。
获取版本的ID可以基于提供的代码片段构建。
答案 1 :(得分:5)
嗯,我已经得出结论,这在paper_trail中是不可能开箱即用的。
我最终做的是,当更新其中一个特定属性时,在Versions表的单独metadata column中保存一个标志。
然后我可以在将来搜索这些列,以找出该特定属性何时更改。
希望这有助于其他人。
答案 2 :(得分:3)
对于那些不想使用单独元数据列的人来说,这是另一个选项:
$(document).ready(function(){
$("#cb").click(function(){
if($('#cb').is(':checked')){
alert("The paragraph was checked.");
} else {
alert("The paragraph was unchecked.");
}
});
});