0
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 3 years have passed since last update.

セレクトボックスは値(value)でなくキー(key)で保存する

Posted at

セレクトボックスでデータを保存する際、値でなくキーで保存する方法を紹介します。

キーで保存するメリット

・セレクトボックスの表示を変えたい場合、データベースに登録しているレコードの値を変更する必要がありません。
・日本語のデータを保存する際に、keyを日本語にする必要がありません(コードの見た目の問題)

やりかた

invertメソッドを使います。ハッシュのkeyvalueが逆転します。

selectbox.rb
<%= form_with url: users_path do |f| %>
  <%= f.select :fruit, { a: "りんご", b: "みかん" }.invert %>
  <%= f.submit "保存" %>
<% end %>

invertを使った上記コードの場合、
・ブラウザに表示されるのは、「りんご」「みかん」
・保存されるのは、「a」「b」です。

もし、セレクトボックスの表示を変えたくなったら

selectbox.rb
<%= form_with url: users_path do |f| %>
  <%= f.select :fruit, { a: "ぶどう", b: "もも" }.invert %>
  <%= f.submit "保存" %>
<% end %>

上記のようにすればOKです。
既存のレコードの値を変える必要がなく管理が楽になります:relaxed:

以上です。

記事を書いた背景

キー(key)を日本語で書くのは、エンジニアの中には違和感を持つ方もおられるそうです。
そのため、下記のようなコードは控えたほうがいいそうです。

selectbox.rb
<%= form_with url: users_path do |f| %>
  <%= f.select :fruit, { りんご: "りんご", みかん: "みかん" } %>
  <%= f.submit "保存" %>
<% end %>

もちろんこのままでも正常に動きますけどね:point_up:
ただ、そうなるとセレクトボックスの表示が英語になってしまうんですよね。

selectbox.rb
<%= form_with url: users_path do |f| %>
  <%= f.select :fruit, { a: "りんご", b: "みかん" } %>
  <%= f.submit "保存" %>
<% end %>

これでは困るということで、invertメソッドを使ったわけです。

開発環境

Ruby: 2.7.1
Rails: 6.0.0.3

0
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
0
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?