ActiveMode::Modelのi18nの書き方
Rails4アプリを作成してまず試してみたのがActiveModel::Modelを使ったフォームのバリデーション。
Strutsで育った身としては、ActiveRecordで入力チェックするのは違和感があり、ビジネスロジックに入る前にコントローラでチェックしたい。そんな理由からActiveModel::Modelをフォーム代わりに使用した。
そこでわからなかったのがconfig/locales/ja.ymlの書き方。以下のようなクラスを作った場合、ja.ymlはどう書けばいいんだ?
class Front::LoginForm include ActiveModel::Model attr_accessor :login_id, :passwd end
ja.activerecord.modelsに書けばいいと思っていたのだけど違ってた。以下のように書くみたい。
ja: activemodel: models: front/login_form: "ログイン" attributes: front/login_form: login_id: ログインID passwd: パスワード
調べてみると、ActiveModel::ModelはRails4で作られたようだけど、ActiveModelはRails3の時から存在していて既に上記のように書けたみたいね。
ちなみに、今回作ったクラスはFrontモジュール内に作ったので、それをどう表現すればいいのか迷いました。
ja: activemodel: models: front/login_form: "ログイン"
なのか
ja: activemodel: models: front: login_form: "ログイン"
なのか。結局前者だった訳だけど、その辺のヒントはmodel_namクラスメソッドにありました。
irb(main):026:0> y Front::LoginForm.model_name --- !ruby/object:ActiveModel::Name name: Front::LoginForm klass: !ruby/class 'Front::LoginForm' singular: front_login_form plural: front_login_forms element: login_form human: Login form collection: front/login_forms param_key: front_login_form i18n_key: :front/login_form route_key: front_login_forms singular_route_key: front_login_form => nil irb(main):028:0> Front::LoginForm.model_name.i18n_key => :"front/login_form"
Rubyの開発をしていていつも思うのは「無知って怖い」っていうこと。RailsでWEBアプリを作ることができるけど、Railsの調べ方が難しい。中途半端にググってもバージョンにマッチした情報が出てこなかったりする。そもそも機能の存在自体を知らない場合はググることすらしない。多分、最短距離は「チュートリアルを読むこと」だとは思うが。