Railsのscaffoldで使われているerror_messages_forってすっごく便利なのですが、
これリストの入力フォームに対応していないんですよね。
上記の画面には2行のテーブルがあって、
交通費、宿泊費、その他の3レコードが含まれています。つまり3×2で6レコードです。
普通にerror_messages_forだとチェック自体は行われますが、エラーメッセージが最後の1レコード分しか出ませんでした。
というわけで、すべてのレコードのエラーを拾って重複を排除して表示する用にしてみました。
app/helpers/application_helperにメソッドを追加してもいいんですが、最近ActiveHeartを入れたばかりなので、
vender/plugin/active_heart/lib/active_recorde_message_ja.rbのerror_messages_forの下に下記コードを追加しておきました。
エラーチェック自体は相変わらず適当(あえてエラー出しています)なのですが・・・
が、またしても此処で問題が。
詳細の項目には:allow_nilでnilやブランクの場合はチェックしないようにしているんですが、何故かチェックされてしまいます。他の所はちゃんと動作しているのに・・・
近々攻略予定です。

ruby&rails初心者なので恥ずかしい限りですが、一応動作はしているみたいです。ツッコミ有ればご指導下さい。 つか、こんなのとっくに誰か作っている気もする。更に言えば確実に此処はRailsらしからぬ実装になってしまったかも。def list_error_messages_for (object_name, options = {}) objects = instance_variable_get("@#{object_name}") errors = Array.new for record in objects unless record.errors.empty? record.errors.each_full { |msg| errors.push(msg)} end end errors = errors.uniq unless errors.empty? options = options.symbolize_keys content_tag("div", content_tag( options[:header_tag] || "h2", "#{errors.size}個のエラーが発生しました" ) + content_tag("p", "次の項目に問題があります") + content_tag("ul", errors.collect { |msg| content_tag("li", msg) }), "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation" ) end end

コメント