Ransack を使用した Enum フィールドの検索
概要
列挙型フィールド「status」を持つテーブル「jobs」があります。 status には次の列挙型セットがあります。
enum status: [ :draft, :active, :archived ]
ransack を使用して、テーブルをフィルタリングして、たとえばすべてのアクティブなレコードを取得するにはどうすればよいですか?
解決策
次のようにモデル内で独自の ransacker を宣言できます。
ransacker :status, formatter: proc {|v| statuses[v]} do |parent|
parent.table[:status]
end
次に、デフォルトの ransack 構文 _eq を使用して、次のように等価性を確認できます。
Model.ransack(status_eq: 'active').result
編集:列名が変更されない場合は、コードのブロックをスキップできます。
ransacker :status, formatter: proc {|v| statuses[v]}