例えば、
app/models/user.rb
class User < ActiveRecord::Base
enum sex: { male: 0, female: 1 }
end
となっていて、フォームでselect
をi18n対応させたい。
config/locales/ja.yml
ja:
activerecord:
attributes:
user:
sex: 性別
male: 男性
female: 女性
と書きたいけど、YAMLの構文として誤りなので、これは出来ない。
よく考えてみると、これはattributesでは無いよなぁ、ということで、違う項目に出してみる。
config/locales/ja.yml
ja:
activerecord:
attributes:
user:
sex: 性別
enum: # <= HERE!
user:
sex:
male: 男性
female: 女性
これなら、ハッシュで値ごとに表記名が出せる。
使い方としては、
app/views/users/_form.html.erb
<%= form_for(@user) do |f| %>
<%= f.label :sex %>
<%= f.select :sex, User.sexes.to_a.map { |s| [t("activerecord.enum.sex.#{s[0]}"), s[1]] } %>
<% end %>
みたいにすると、"男性”、"女性" が選択できるselect
タグが生成できる。
でも、毎回、I18n.t
を呼ばないといけないのは辛い。