2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ransackのselectボックスでenumのi18nを使用する

Posted at

はじめに

ransackのselectボックスでenumのi18nを使用する時に記載方法に迷ったのでメモを残します

理解していないとハマること

・enumを使用すると、実際にDBに保存されているのは対応づけられたinteger(数値)であること
・ransackはその数値に基づいて検索をかけていること
・selectボックスを検索条件に設定した時のHTML構造を理解すること
(valueの値がenumで設定した名前(文字列)になっていること)

<option value="0">男向け</option>
<option value="1">女向け</option>
<option value="2">その他</option>

ポイント

Admin.statuses_i18n.invert.map { |key, value| [key, Admin.statuses[value]] }

key・・・enumで設定した名前(文字列)
value・・・enumで対応づけられたinteger(数値)

間違えていたこと

ransackはenumを使用すると、実際にDBに保存されているのは対応づけられたinteger(数値)に基づいて検索をかけていることが抜けていました

Admin.statuses_i18n.invert

key・・・enumで設定した名前(日本語)
value・・・enumで設定した名前(英語)

上記だと数値で検索をかけられないので正常に機能しませんでした

実際に書いたコード

= search_form_for @search, url: xxx_path do |f| 
 = f.select :status_eq, Admin.statuses_i18n.invert.map { |key, value| [key, Admin.statuses[value]] }
admin.rb
enum status:{for_men: 0, for_women: 1, for_others: 2}
ja.yml

ja:
  activerecord:
    省略
  enums:
    admin:
      status:
        for_men: 男向け
        for_women: 女向け
        for_others: その他

参考資料

【Rails】enumを使用したselectボックスの作成(ransackで使用する際の注意点も)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?