0

在我的数据库中,我有一个表“审计”,其中包含一个名为“更改”的字段,它以哈希的形式存储数据。

我想检索具有以下条件的所有审核:

- auditable_type = 'Expression'
- action = 'destroy'
- changes = :EXP_SUBMISSION_FK =>'9999992642' #note that this field stores hash values

@expression_history_deleted = Audit.find(:all, :conditions => ["auditable_type =? AND action = ? AND changes = ?",'Expression', 'destroy' , { :EXP_SUBMISSION_FK =>'9999992642'} ])

上面的代码什么也不返回。

如果我删除条件中的“更改”,使其如下所示,我会得到一个条目列表:

@expression_history_deleted = Audit.find(:all, :conditions => ["auditable_type =? AND action = ?",'Expression', 'destroy'])



   <% @expression_history_deleted.each do |test| %>
    <%= test.changes['EXP_SUBMISSION_FK'] %> ---displays the value
    <% end %>

我的问题是如何执行搜索并设置哈希值的条件。

****

我正在使用“acts_as_audited”,它将哈希格式的所有更改存储在“审计”表中。

****
4

2 回答 2

1

我假设您正在使用 ActiveRecord 中的序列化功能?

不幸的是,我认为在 SQL 级别上搜索它并不容易。显然可以提取所有记录并在 Ruby 中处理搜索,但这并不理想。

我建议将您需要搜索的任何内容从序列化列中移到它自己的列中。

于 2012-08-15T15:11:31.170 回答
1

如果您使用 ActiveRecord 序列化宏,那么您可以转储包含列changes和单独的结构,如“audible_type: Expression”。尝试在该列上执行一系列全文搜索,工作就完成了。但更可取的方法是将这些数据提取到真正的数据库级列中

于 2012-08-15T15:15:42.667 回答