2016-05-16 10 views
5

列挙型フィールド 'status'を持つ 'jobs'テーブルがあります。ステータスは、以下のenumセットを持っていますRansackで列挙型フィールドを検索する

掻き回すを使用して
enum status: [ :draft, :active, :archived ] 

、どのように私はすべてのアクティブなレコードを、たとえば、テーブルをフィルタリングするのですか?あなたはこのようなモデルでは独自のransackerを宣言することができ

+0

これまで試みたことを投稿してください。 – floum

答えて

5

Model.ransack(status_eq: 'active').result 

編集:

ransacker :status, formatter: proc {|v| statuses[v]} do |parent| 
    parent.table[:status] 
end 

を、あなたはこのような平等をチェックするために、デフォルトの掻き回すの構文_eqを使用することができ、列名がない場合あなたはコードのブロックをスキップすることができます変更:

​​
+0

ありがとうございます。それは動作しますが、私は同様にparam値を使用して、通常の検索を行うかもしれないようです。コードは少し上手く/簡単にそのように読んでいます。 Active Directoryのフィルタを追加すると、Ransackをフィルタリングに使用していても、ransackerを作成せずに機能しました。奇妙なことに、フロントエンドでは簡単には機能しませんでした。 – Will

+0

@Will Yeap、単純なスコープを使うことができます。それはうまく動作するはずです:)しかし、あなたがransackを使用してスキップすることはできません。上記のコードがなければ、パラメータ 'active'を整数' .to_i'にキャストするので、適切な値の代わりに常に '0'を得ます。 – qarol

6

これは私です私はenumsとransackについての私の意見を聞きました:

<%= f.select :status_eq, Model.statuses.to_a.map { |w| [w[0].humanize, w[1]] }, 
         {:include_blank => true} %> 
+0

だから、ransackはあなたのためにenum会話をしないので、qハッシュに属性の整数値を渡す必要があると思われます。 – Donato

+0

これは最高の作品です! –