Cómo enviar estado-http usando JBuilder Gem

Estoy utilizando Rails 3.0.19 y JBuilder Gem 2.0.6 para representar respuestas JSON.

JBuilder: https://github.com/rails/jbuilder

A continuación se muestra el código que estoy utilizando para enviar mensajes de error para una API específica.

render :json, :template=>"/api/shared/errors.json.jbuilder", :status=> :bad_request 

Por alguna razón, el cliente recibe el estado 200-ok. Mientras, he esperado 400 (bad_request).

¿Alguna ayuda, por favor?

Aquí está mi código en detalle:

  def render_json_error_messages #render :template=> "/api/shared/errors.json.jbuilder", :status=> :bad_request, :formats => [:json] respond_to do |format| format.json { render :template=> "/api/shared/errors.json.jbuilder", :status=> 400 } end end 

Y en un método before_filter, uso render_json_error_messages

Esto funciona:

controlador

 def some_action render status: :bad_request end 

some_action.jbuilder

 json.something "test" 

Intente renderizar jbuilder para establecer una cadena y luego establecer el estado … funciona en Rails 4.1.4

 jstr = render_to_string( template: 'api/shared/index.jbuilder', locals: { nodes: @nodes}) respond_to do |format| format.html format.json { render json: jstr, status: :bad_request } end 

Lo demás también funciona.

 format.json { render template: 'api/shared/index.jbuilder', status: 404 } 

No sé sobre Rails 3.0, pero pude proporcionar el estado adecuado simplemente agregando un bloque respond_to a la acción del controlador. Como ejemplo, tengo una create así:

 def create # ... create logic respond_to do |format| format.html format.json { render status: :created, success: true } end 

El código anterior establece mi código de estado en 201 y muestra app/views/orders/create.json.jbuilder

Espero que ayude.

tal vez revertir el pensamiento:

 @pictures = ... respond_to do |format| format.html format.json do if @error.present? # @error contains some error message render json: @error, status: :unprocessable_entity else render template: 'api/shared/index.jbuilder' end end 

api / shared / index.jbuilder

 json.array! @pictures, :id, :filename, :width, :height 

trabaja en Rails5.1.4

    Intereting Posts