Следующая команда в консоли:
curl 'https://3b803ce956aa.ngrok.io/api/v1/send' -i --header "Accept: application/json" --header "Content-Type: application/json" -H 'Accept-Charset: utf-8' -H 'Authorization: Token token="GeUPm5xoxQFXR0ijJOZ6W6xr2ME1wZUWiaB3PLg9uZ8uGhFFDE7YnqCjFQwcCs0zgbtHjIiuc2jxo4I5"' -d '{"server_id":1,"building_id":1}'
, но также с версией
--data '{"server_id":1,"building_id":1}'
, принимается контроллером API. Маршруты определены как:
namespace :api do
namespace :v1 do
post 'send', to: 'messages#send', defaults: { format: :json }
Однако в обоих случаях обработка запросов не выполняется, поскольку он получает и возвращает:
Processing by Api::V1::MessagesController#send as JSON
Parameters: {"server_id"=>1, "building_id"=>1, "message"=>{"server_id"=>1, "building_id"=>1}}
Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms)
ArgumentError (wrong number of arguments (given 1, expected 0)):
где действие контроллера
def send
@request = JSON.parse(request.body.read)
@messagelog = Messagelog.create(server_id: params[:server_id], building_id: params[:building_id]
[...]
Появляются две странности:
- тот факт, что параметры повторяются с содержимым параметров как часть сообщения
- действие ожидает 0 аргументов I не понимаю, почему параметры интерпретируются дважды (это подвопрос ..). Как можно сконструировать действие контроллера API для принятия параметров?