2012-04-16 9 views
2

:あなたは標準のJSONハッシュの代わりにRABLテンプレートを使用するrespond_withを得るのですか、検証が失敗したと仮定すると、RailsのRABL respond_withエラーテンプレート与え、Railsの3.2.xの中で、次のコントローラのアクションRABLを使用して

respond_to :html, :json 

def create 
    @foo = Foo.create(params[:foo]) 
    respond_with @foo 
end 

をエラーの - IE。私は、検証と一緒に返された検証エラーメッセージの他に、他のモデル属性も必要とします。

提案?

答えて

5

私はこれを難しい方法で見つけました。アプリケーションコントローラ用のカスタムレスポンダ、または少なくとも個々のレスポンスを作成する必要があります。詳細は、Three reasons to love ActionController::Responderを参照してください。

私のソリューション:

# app/responders/api_responder.rb 
class ApiResponder < ActionController::Responder 
    def to_format 
    case 
    when has_errors? 
     controller.response.status = :unprocessable_entity 
    when post? 
     controller.response.status = :created 
    end 

    default_render 
    rescue ActionView::MissingTemplate => e 
    api_behavior(e) 
    end 
end 

# app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    #... 
    self.responder = ApiResponder 
    #... 
end 

また、代わりにrespond_with @foo, responder: ApiResponderを使用することができます。

私は正しい方向に私を送るためにhaxneyに感謝します。

+0

私はそれが好きです。ありがとう:) – Andrew

0

コントローラの上部にあるrespond_toコールを削除し、アクション内でrespond_with呼び出しを削除して、rablテンプレートをレンダリングする必要があります。

RABLを必要としない各アクションの最後にrespond_toブロックを追加するだけです。

関連する問題