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'}

失敗の潜在的な原因の 1 つは、探している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 に答える