我在我的项目中使用 Papertrail gem 并进行了大量搜索以尝试找到如何执行以下操作。
我想做的是找到我的对象的版本,其中特定属性成为特定值,即
object.versions.where(attribute: "value")
有谁知道Papertrail 是否可以做到这一点?
以下内容获取
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 可以基于提供的代码片段构建。
def version_where_attribute_changed_to(attribute_name, attribute_value)
versions.select do |version|
object_changes = YAML.load version.object_changes
(object_changes[attribute_name.to_s] || [])[1] == attribute_value
end
end
object.versions.where_object_changes_to(attribute: "value")
@object.versions
.map(&:changeset)
.select{|a| a["attribute"].present?}