从数据库中检索数据 - 哈希

时间:2012-08-29 10:21:35

标签: ruby-on-rails

我有一个名为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

我想知道第一个代码示例出了什么问题,以及是否有一种方法可以更简单的方式检索具有上述条件的所有条目。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我会这样做:

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

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

答案 1 :(得分:0)

你只需使用下面的内容。我将 element_values 存储为哈希,我正在根据键/值对选择记录。

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

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