Ruby Представление ответа API: как отобразить ответ JSON? - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в Ruby, пытаюсь создать API.

Я следовал учебному пособию и смог вернуть ответ JSON при вызове конечной точки API.

В этом примере вызываемая функция вызывает ошибку, которую я хочу передать как JSON ответ.

my_controller.rb

class MyController < ApplicationController
  def getTracklist

    begin
      importer = #this raises an error
    rescue StandardError => e
      @response = {
      error:  e.message,
      }
      return @response
    end

  end

end

мой взгляд выглядит следующим образом:

getTracklist. json .jbuilder

json.response @response

Дело в том,

это работает, но отображает мой ответ как

{"response":{"error":"the error message"}}

, пока я хочу его как

{"error":"the error message"}

Я предпринял попытку изменить свое представление на

json @response

, но это не удалось:

ActionView :: Template :: Error (неопределенный метод `json 'для <#: 0x0000559304675470> Вы имели в виду? JSON): 1: json @ response

Итак, как я могу сделать мой ответ" полностью "без нужно ли указывать его в свойстве?

Я также видел, читая материал о ROR, что этот код иногда используется, и мне было интересно, как я мог бы использовать его в этой ситуации:

render json: { error_code:'not_found', error: e.message }, status: :not_found

Спасибо!

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Есть несколько способов достижения того, что вы хотите. Вы можете merge! получить ответ в jbuilder root.

json.merge! @response

Вышеприведенное объединяет все пары ключ / значение в jbuilder root. Вы также можете выбрать атрибуты extract! Speci c.

json.extract! @response, :error

В качестве альтернативы вы можете просто отобразить его в контроллере, так как вы уже скомпоновали структуру, так что хватит.

render json: @response
0 голосов
/ 05 марта 2020
class MyController < ApplicationController
  def getTracklist

    begin
     # you need to assign something to a variable
    rescue StandardError => e
      respond_to do |format|
        format.any(:json, :js) do
          render :json => {:error => e.message}
        end
      end
    end
  end
end

Внесение этих изменений в ваш контроллер может помочь вам с вашими требованиями. После этого вам не нужен вид.

0 голосов
/ 05 марта 2020

Вы можете сделать это для jBuilder:

json.merge!(@response)

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...