Bet*_*rds 10 ruby-on-rails ruby-on-rails-3 paper-trail-gem
我正在我的项目中使用Papertrail宝石,并进行了广泛的搜索,试图找到如何做到以下几点.
我想要做的是找到我的对象的版本,其中特定属性变为特定值,即
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'}
Run Code Online (Sandbox Code Playgroud)
结果将是这样的:
[{"attribute"=>[nil, "value"],
"updated_at"=>[2015-01-02 12:20:36 UTC, 2015-01-02 12:20:56 UTC]}]
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
从 PaperTrail 12.1 开始,您可以执行以下操作
object.versions.where_object_changes_to(attribute: "value")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3491 次 |
| 最近记录: |