繁体   English   中英

从数据库检索数据-哈希

[英]retrieve data from database - hash

我有一个称为audits的表,该表具有一列“ changes”,以哈希形式存储数据

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

- 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'检索了'audits'表中的所有条目。

然后,我遍历结果集并丢弃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

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

非常感谢你的帮助。

我会做:

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

导致失败的一种可能原因是,您正在查找9999992642但在值是'9999992642'之前'9999992642'

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

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

只需根据您的情况尝试一下即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM