0

我有一个名为的表audits,其中有一列“更改”以哈希的形式存储数据

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

- auditable_type = 'Expression'
- action = 'destroy'
- changes = { :EXP_SUBMISSION_FK =>'9999992642'}

我首先尝试了以下代码,它什么都没有返回:

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

然后我尝试了以下代码,该代码使用 和 检索“审计​​”表中的所有auditable_type = 'Expression'条目action = 'destroy'

然后,我遍历结果集并丢弃 EXP_SUBMISSION_FK 不等于 9999992642 的所有条目。下面的代码返回 5 个条目/记录

   @deleted_history = Audit.find(:all, :conditions => ["auditable_type =? AND action = ?",'Expression', 'destroy' ])
    @deleted_history.each do |test|
      if test.changes['EXP_SUBMISSION_FK'] != 9999992642
        @deleted_history = @deleted_history.reject { test }
      end
    end

我想知道第一个代码示例哪里出错了,以及是否有办法以更简单的方式检索具有上述条件的所有条目。

非常感谢你的帮助。

4

2 回答 2

1

我会做:

@deleted_history.select!{|hist| hist.changes['EXP_SUBMISSION_FK'] == '9999992642'}

失败的一个潜在原因是您正在寻找9999992642但您在价值之前声明'9999992642'

于 2012-08-29T10:36:26.723 回答
0

您只需使用如下所示的内容。我将element_values存储为哈希,并根据键/值对选择记录。

scope :find_by_field_values, lambda {
  |field_name, field_value| 
  (where("element_values like ?", "%\"#{field_name}\":\"%#{field_value}%"))
}

只需根据您的情况尝试此操作。

于 2012-08-29T10:37:07.603 回答