@MagoVinch

Почему не работает POST запрос на ruby on rails из Advanced Rest Client?

В контроллер описан вот такой метод
def create
      @messege = Messege.new(messege_params)
      if @messege.save
        render json: @messege, status: :created, location: @messege
      else
        render json: @messege.errors, status: :unprocessable_entity
      end
  end


private
    # Use callbacks to share common setup or constraints between actions.
    def set_messege
      @messege = Messege.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def messege_params
      params.require(:messege).permit(:author_id, :destin_id, :content)
    end
end


При попытке создать новое сообщение, при отправке POST запроса из Advanced Rest Client, но возвращает Bad Request

отправляю на адрес test.com/messeges (пробовал и test.com/messeges.json)
параметры заполняю вот так author=3&destin=1&content=test
"Content-Type" выбрал application/json

Подскажите решение!
  • Вопрос задан
  • 3233 просмотра
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
Если вы хотите отправлять JSON, то, собственно, JSON и отправляйте.
Проверить JSON можно, например, здесь: jsonformatter.curiousconcept.com
Такой JSON:
author=3&destin=1&content=test
Проверку не пройдет.
А такой:
{ "author": "3", "content": "test" }
Уже скорее да.
Плюс, иногда надо помнить, что JSON, у которого аргументы взяты в одинарные кавычки - может считаться невалидным.

Это как самая распространенная проблема при использовании всяких рест-клиентов - они не переводят удобный формат key/value в JSON, к сожалению.

Если это не поможет, то подробнее описывайте ошибку. Т.к. явно вам возвращается не Bad Request, а какой-то эксепшн, на самом то деле.
Ответ написан
Able1991
@Able1991
Пишу на рельсах
The require method ensures that a specific parameter is present, and if it's not provided, the require method throws an error. It returns an instance of ActionController::Parameters for the key passed into require.

Ваш метод messege_params проверяет наличие параметра :messege и из него берет поля :author_id, :destin_id, :content, следовательно параметры запроса доллжны быть соответствующие
messege : { author_id:1, destin_id:2, content:3}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы