列挙型フィールド 'status'を持つ 'jobs'テーブルがあります。ステータスは、以下のenumセットを持っていますRansackで列挙型フィールドを検索する
掻き回すを使用してenum status: [ :draft, :active, :archived ]
、どのように私はすべてのアクティブなレコードを、たとえば、テーブルをフィルタリングするのですか?あなたはこのようなモデルでは独自のransackerを宣言することができ
列挙型フィールド 'status'を持つ 'jobs'テーブルがあります。ステータスは、以下のenumセットを持っていますRansackで列挙型フィールドを検索する
掻き回すを使用してenum status: [ :draft, :active, :archived ]
、どのように私はすべてのアクティブなレコードを、たとえば、テーブルをフィルタリングするのですか?あなたはこのようなモデルでは独自のransackerを宣言することができ
:
Model.ransack(status_eq: 'active').result
編集:
ransacker :status, formatter: proc {|v| statuses[v]} do |parent|
parent.table[:status]
end
を、あなたはこのような平等をチェックするために、デフォルトの掻き回すの構文_eq
を使用することができ、列名がない場合あなたはコードのブロックをスキップすることができます変更:
ありがとうございます。それは動作しますが、私は同様にparam値を使用して、通常の検索を行うかもしれないようです。コードは少し上手く/簡単にそのように読んでいます。 Active Directoryのフィルタを追加すると、Ransackをフィルタリングに使用していても、ransackerを作成せずに機能しました。奇妙なことに、フロントエンドでは簡単には機能しませんでした。 – Will
@Will Yeap、単純なスコープを使うことができます。それはうまく動作するはずです:)しかし、あなたがransackを使用してスキップすることはできません。上記のコードがなければ、パラメータ 'active'を整数' .to_i'にキャストするので、適切な値の代わりに常に '0'を得ます。 – qarol
これは私です私はenumsとransackについての私の意見を聞きました:
<%= f.select :status_eq, Model.statuses.to_a.map { |w| [w[0].humanize, w[1]] },
{:include_blank => true} %>
だから、ransackはあなたのためにenum会話をしないので、qハッシュに属性の整数値を渡す必要があると思われます。 – Donato
これは最高の作品です! –
これまで試みたことを投稿してください。 – floum