`error_messages' メソッドが廃止されていた | hayaciのブログ

hayaciのブログ

自分が知った技術とかデザインとかいろいろ書きます

「Head First Rails」もやっと5章まで来た。

モデルがsaveに失敗したら、エラーメッセージを出すようにしたくて、
例題通り書くとサーバエラーになってしまった。

<%= form_for(@ad, :url=>{:action=>'create'}) do |f| %>

 <%= f.error_messages %>
このコードはアカンらしい。
でたエラーがこれ。
undefined method `error_messages' for #<ActionView::Helpers::FormBuilder:0x007fb88d219970>

調べると、error_messagesはRuby on Rails(v2.3.8)までで廃止されてた。
error_messages_for (ActionView::Helpers::ActiveRecordHelper) - APIdock

Getting Started with Rails — Ruby on Rails Guides
を見ると、代わりにActiveModel::Errorsって言うクラスを使っていた。
それにならって書いたらちゃんとエラーメッセージを出せた。

  <% if @ad.errors.any? %>
  <div id="errorExplanation">
    <h2><%= pluralize(@ad.errors.count, "error") %> prohibited
      this post from being saved:</h2>
    <ul>
    <% @ad.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
  <% end %>

こういう細かい所が変わってるのがたくさんある。
やっぱ初版2010/1はちょっと古かったかなー。
Head First Rails ―頭とからだで覚えるRailsの基本/オライリージャパン
¥3,990
Amazon.co.jp