在我的数据库中,我有表格'审核'其中包含一个名为“更改”的字段。它以哈希的形式存储数据。
我想检索具有以下条件的所有审核:
- 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;它将哈希格式中的所有更改存储在“审核”中。表
****
答案 0 :(得分:1)
我假设你在ActiveRecord中使用序列化功能?
不幸的是,我认为在SQL级别上搜索它并不容易。显然有可能取出所有记录并在Ruby中处理搜索,但这不太理想。
我建议您将所需的任何内容从序列化列中移动到自己的列中。
答案 1 :(得分:1)
如果您正在使用ActiveRecord序列化宏,那么您可以转储列changes
的包含和separete构造,如“audible_type:Expression”。尝试在该列上执行一系列全文搜索,然后完成工作。
但更优选的方法是将数据提取到真实的数据库级别列中