Ruby on rails Rails RABL使用错误模板进行响应

Ruby on rails Rails RABL使用错误模板进行响应,ruby-on-rails,rabl,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_使用RABL模板而不是标准的JSON错误哈希——也就是说,我希望除了验证错误消息之外,还有其他模型属性随请求一起发送回来 建议?我想,您需要删除控制器顶部的respond_to call,并删除action内的r

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

respond_to :html, :json

def create
  @foo = Foo.create(params[:foo])
  respond_with @foo
end
假设验证失败,如何让respond_使用RABL模板而不是标准的JSON错误哈希——也就是说,我希望除了验证错误消息之外,还有其他模型属性随请求一起发送回来


建议?

我想,您需要删除控制器顶部的respond_to call,并删除action内的respond_with call,以获取rabl呈现您的rabl模板


只需在每个操作的末尾添加一个respond_来阻止您不需要RABL的操作。

我好不容易才发现这一点。您应该为您的应用程序控制器创建一个自定义响应程序,或者至少为您的单个响应创建一个自定义响应程序。有关更多详细信息,请参阅

我的解决方案:

# 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
#app/responder/api_responder.rb
类ApiRespondere
api_行为(e)
结束
结束
#app/controllers/application_controller.rb
类ApplicationController
您也可以将
respond_与@foo一起使用,responder:apireponder

谢谢你把我送到正确的方向