find:哈希的所有条件

时间:2012-08-15 14:46:51

标签: ruby-on-rails

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

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

- 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 %>

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

****

我正在使用&#39; acts_as_audited&#39;它将哈希格式中的所有更改存储在“审核”中。表

****

2 个答案:

答案 0 :(得分:1)

我假设你在ActiveRecord中使用序列化功能?

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

我建议您将所需的任何内容从序列化列中移动到自己的列中。

答案 1 :(得分:1)

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