2014-01-08 2 views
5

私はこのように定義された方法でActiveRecordのモデルを持っている:Meta_searchからRansackにアップグレードしたときに「有効な述語がありません」というエラーがありますか?

search_method:状態

'search_method' は、モデルで定義されている

def state 

    if deleted? 
    :deleted  
    else 
    :expired 
    end 

end 

ビュー:

= form.select:{{expired => 'Expired'、 :=> '削除した'} .invert、削除:Meta_searchでinclude_blank => 'すべての'

を、この方法はうまく働いていました。しかし、宝石を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(で始まるもの)など)。

Ransackはレコードを検索するためにSQLクエリを作成します。したがって、モデルに:deleted_atのような属性がある場合は、存在または不足で検索できます。メソッドを見ることはなく、dbに格納されている情報だけです。

詳しい述語との情報はここにある:https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching

関連する問題