2014-01-08 53 views
5

我有像這樣定義的方法ActiveRecord模型:從Meta_search升級到Ransack時出現「無效謂詞」錯誤?

def state 

    if deleted? 
    :deleted  
    else 
    :expired 
    end 

end 

的 'search_method' 在模型中被定義爲:

search_method:狀態

在查看:

= form.select:state,{:expired =>'Expired', :刪除=> '已刪除'} .invert,:include_blank => '全部'

隨着Meta_search,這種方法是工作的罰款。但是當我用Ransack取代了寶石時,我得到:參數錯誤在樣品控制器中 沒有有效的狀態謂詞。

我跟隨meta_search search_methods的這種行爲,所以我可能會採取錯誤的方法。任何人都可以幫助我嗎?

+0

我認爲你需要謂詞適用於像'state_start'領域。看看這個問題https://github.com/activerecord-hackery/ransack/issues/22 – phoet

回答

0

Ransack使用一個謂詞添加到您要搜索的字段的末尾,以指示如何搜索它。如果在模型上有:state的屬性,則可以使用form.select :state_match,搜索與「過期」或「已刪除」匹配的狀態,其中_match表示將記錄與所選內容的狀態進行匹配。 (像_cont(包含)或_start(開頭))。

洗劫使得SQL查詢來查找記錄,所以如果你對你的模型像:deleted_at有一個屬性,你可以通過存在或缺的搜索。它不會查看方法,只是存儲在數據庫中的信息。

更多謂詞和信息在這裏:https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching