Rails RABL respond_with错误模板

时间:2012-04-16 03:55:20

标签: ruby-on-rails rabl

在Rails 3.2.x中使用RABL,给出以下控制器操作:

respond_to :html, :json

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

假设验证失败,您如何获得respond_with以使用RABL模板而不是标准的JSON错误哈希 - IE。除了与请求一起发回的验证错误消息之外,我还想要其他模型属性。

建议?

2 个答案:

答案 0 :(得分: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让我朝着正确的方向前进。

答案 1 :(得分:0)

我想,您需要删除控制器顶部的respond_to调用,并删除操作中的respond_with调用,以便让Rabl呈现您的rabl模板。

只需在每个不需要RABL的操作结束时添加respond_to块。