2012-08-15 47 views
0

在我的數據庫中,我有表'audits',其中包含一個名爲'changes'的字段,它以散列形式存儲數據。找到:散列的所有條件

我想檢索符合以下條件的所有審計:

- 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',它存儲散列格式在'audits'表中的所有變化。

**** 

回答

1

我假設你正在使用ActiveRecord中的序列化函數?

不幸的是,我不認爲很容易在SQL級別上搜索它。很顯然,可以提取所有記錄並處理Ruby中的搜索,但這並不理想。

我建議您將需要搜索的任何東西移出序列化列並移入其中。

+0

感謝您的建議。我正在使用'acts_as_audited',它將散列格式中的所有更改存儲在'audits'表中。 – Kim 2012-08-15 15:14:55

+0

在這種情況下,我想我需要檢索記錄並使用ruby執行搜索 – Kim 2012-08-15 15:15:41

+0

這似乎是最簡單的解決方案。另一種方法就是像Vladson建議的那樣做,並試圖進行一些複雜的全文搜索,但由於我們正在處理實際數據而不僅僅是文本,它會讓我偏執。 – jbarket 2012-08-15 15:20:36

1

如果您使用的是ActiveRecord序列化宏,那麼您可以轉儲包含列changes和separete結構(如「audible_type:Expression」)的包含。嘗試在該列上執行一系列全文搜索並完成工作。 但更可取的方法是將該數據提取到真正的數據庫級別列表中