0

私のデータベースには、データをハッシュ形式で保存する「変更」というフィールドを含む「監査」テーブルがあります。

次の条件ですべての監査を取得したいと思います。

- 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 %>

私の質問は、検索を実行してハッシュ値の条件を設定する方法です。

****

「監査」テーブルにすべての変更をハッシュ形式で保存する「acts_as_audited」を使用しています。

****
4

2 に答える 2

1

ActiveRecordシリアル化マクロを使用している場合は、changes「audible_type:Expression」のような列と個別の構造の包含をダンプできます。その列で一連の全文検索を実行してみてください。作業は完了です。しかし、より好ましい方法は、そのデータを実際のデータベースレベルの列に抽出することです。

于 2012-08-15T15:15:42.667 に答える
1

ActiveRecord で serialize 関数を使用していると思いますか?

残念ながら、SQL レベルで検索することは容易ではないと思います。Ruby ですべてのレコードを取り出して検索を処理することはもちろん可能ですが、それは理想的とは言えません。

検索する必要があるものはすべて、シリアル化された列から独自の列に移動することをお勧めします。

于 2012-08-15T15:11:31.170 に答える