RailsではDBにデータを保存するときやvalid?メソッドが実行されたときに
モデルに記述したvalidatesヘルパやvalidateメソッドでモデルの値を検証する。
エラーがあったらerror_messages_forで「〜の値が不正ですよ!」みたいなメッセージを表示するわけだが、
コレに関するTipsをまとめておく。
1.エラーメッセージをまとめる
複数のモデルを保存する場合
<%= error_messages_for :user %> <%= error_messages_for :person %>
↑のように書くと、メッセージが別々に表示される。
エラーメッセージの例は↓
2 errors prohibited this user from being saved There were problems with the following fields: * Secret answer can't be blank * Password is invalid 1 error prohibited this person from being saved There were problems with the following fields: * Email のフォーマットが正しくありません。
まとめたい時は↓のように書く。
<%= error_messages_for :user, :person %>
エラーメッセージの例は↓
3 errors prohibited this user from being saved There were problems with the following fields: * Secret answer can't be blank * Password is invalid * Email のフォーマットが正しくありません。
2.メッセージの日本語化
A. ↓を実行。
gem install gettext
B. environment.rbの最後に↓を追記
require 'gettext/rails'
C. apprication.rbのクラス内に↓を追記
init_gettext "myapp" #myappは任意のアプリ名
D. ruby\gems\1.8\gems\gettext-1.92.0\samples\rails\lib\tasksのgettext.rakeを(Railsアプリのフォルダ)/lib/taskにコピー。
E. ↓をRailsアプリのフォルダで実行
rake updatepo
F. ↓みたいな感じでモデルの中でカラム名の日本語名称を設定する。
set_field_names :title => 'タイトル', :url => 'URL'
3.トラブルシューティング(というか俺がはまった現象orz)
E.の操作を実行した時に↓のメッセージが出る。
rake aborted! undefined method `label' for class `ActionView::Helpers::FormBuilder'
原因1:gettextの1.90以降がRails2.0以降にしか対応していないため
対応1:Rails開発日記: undefined method `label' for class `ActionView::Helpers::FormBuilderを参照のこと。
原因2:Rails2.0使ってるよ?という人はrake rails:freeze:gemsを過去に実行してませんか?
対応2:そんな場合はrake rails:unfreezeを実行すればOK。
E.の操作を実行した時に↓のメッセージが出る。
No such file or directory - msgmerge --version