查找papertrail中特定属性已更改的版本

时间:2014-06-11 11:13:50

标签: ruby-on-rails ruby-on-rails-3 paper-trail-gem

我在我的项目中使用Papertrail gem并进行了广泛搜索,尝试找到如何执行以下操作。

我想要做的是找到我的对象的版本,其中特定属性变为特定值,即

object.versions.where(attribute: "value")

有人知道Papertrail是否可以实现这一目标吗?

3 个答案:

答案 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.");
}
});
});