Railsでenumを定義していれば、対応するintegerでもstringでも検索ができます。
MailMagazine.where(status: 'sent') MailMagazine.where(status: 1)
しかしransackで`status_eq’を使って文字列を渡すと,必ず0が渡って正しく検索されないようです。
pry(main)> MailMagazine.search(status_eq: 'sent').result MailMagazine Load (0.2ms) SELECT "mail_magazines".* FROM "mail_magazines" WHERE "mail_magazines"."status" = 0 => []
なので、enum_helpを使ってselectするときにネストした配列の2番目の要素がintegerになるような処理を書いてみました。
GitHub – zmbacker/enum_help: Help ActiveRecord::Enum feature to work fine with I18n and simple_form.
[8] pry(main)> MailMagazine.statuses_i18n.invert => {"送信待ち"=>"draft", "送信中"=>"sending", "送信済"=>"sent"} [9] pry(main)> MailMagazine.statuses_i18n.invert.map{|key,value| [key, MailMagazine.statuses[value]]} => [["送信待ち", 1], ["送信中", 2], ["送信済", 3]]
active adminを使っているのですが、ログやgemfileを見てみると、ransackを使っているようでした。filterでstringを渡していて、正しく検索されないので、上記のような処理を書いてみました。
コメントを残す