menos de 1 minuto

A veces hay que retornar diferentes status HTTP en las peticiones Rails. El típico rails generate scaffold… genera una action como la siguiente:

  # POST /courses
  # POST /courses.json
  def create
    @course = Course.new(params[:course])
    respond_to do |format|
      if @course.save
        format.html { redirect_to @course, notice: 'Course was successfully created.' }
        format.json { render json: @course, status: :created, location: @course }
      else
        format.html { render action: "new" }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

Cuando la llamada a save falla y el formato de salida es json, se devuelven los errores en formato json y con el estado HTTP :unprocessable_entity. Pero, ¿de donde sale este símbolo?

Buscando en internet he encontrado la página http://www.codyfauser.com/2008/7/4/rails-http-status-code-to-symbol-mapping, donde indica que los diferentes status HTTP están definidos en el fichero actionpack/lib/action_controller/status_codes.rb. A partir de Rails 3 estos códigos se han movido a Rack. Ahora los tenéis disponibles en rack/utils.rb, en la constante HTTP_STATUS_CODE. Si tenéis arrancado el servidor gem (sudo gem server) podéis ver la documentación en http://0.0.0.0:8808/doc_root/rack-1.5.2/rdoc/Rack/Utils.html

Deja un comentario