一分一秒真剣勝負!

Ruby, Railsなど。Web系の技術ネタを充実させたい・・が、そうなるかは分からない。

ActiveResourceでバリデーションのエラーメッセージを送信する方法

よく見るサンプルコードみたく以下のように書くとダメ。

if @hoge.save
  format.json { render :json => @hoge, :status => :ok } 
else
  format.json { render :json => @hoge.errors, :status => :unprocessable_entity }
end

エラーを返す時はハッシュで:errorsをつけてやるとおkでした。

if @hoge.save
  format.json { render :json => @hoge, :status => :ok } 
else
  format.json { render :json => {:errors => @hoge.errors.to_json}, :status => :unprocessable_entity }
end

クライアント側ではこれをやってやるだけで取得できます。Railsが勝手にやってくれると思い込んでたんだけど、こうしないとダメらしい。なんか面倒だな。@hoge.errors.to_jsonの#to_jsonは省略できないものか。。