Rails 5 ActiveRecord::SerializationTypeMismatch при создании ресурса через API

Я использую приложение Rails 5 (beta3) для API. Моя модель имеет сериализованный атрибут, сериализованный в массив. Когда я отправляю тестовый запрос от Postman, я получаю следующую ошибку:

ActiveRecord::SerializationTypeMismatch (Attribute was supposed to be a Array, but was a String. -- "[\"amat\",\"bmat\",\"cmat\"]"):

app/controllers/api/v1/services_controller.rb:23:in `create'
  Rendered vendor/cache/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (3.1ms)
  Rendered vendor/cache/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.3ms)
  Rendered vendor/cache/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.8ms)
  Rendered vendor/cache/gems/actionpack-5.0.0.beta3/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (15.3ms)

Я понимаю, что означает ошибка, но я не могу сериализовать данные, которые я получаю из почтового запроса. Я не знаю, как и где сериализовать это, прежде чем пытаться создать запрос.

Соответствующие части моего контроллера:

before_action :set_service, only: [:show, :edit, :update, :destroy]

def create
  @service = Service.new(service_params)
  if @service.save
    render json: {message: 'Service created.'}, status: 200
  else
    render json: {message: 'Error creating Service.'}, status: 500
  end
end

private
  def set_service
    @service = Service.find(params[:id])
  end

  def service_params
    params.require(:service).permit(:name, :sub_service, :material, :parts)
  end

Модель обслуживания:

class Service < ApplicationRecord
  serialize :parts,Array
end

Я отправляю запрос как Raw JSON:

{
  "service" : {
    "name": "Foiling",
    "sub_service":"Full",
    "material":"plastic",
    "parts":["parta","partb","partc"]
  }
}

person Sambhav Sharma    schedule 08.03.2016    source источник
comment
Как выглядит ваш тестовый запрос? Вы отправляете массив или строку в своем запросе?   -  person spickermann    schedule 08.03.2016
comment
добавлено в вопрос.   -  person Sambhav Sharma    schedule 08.03.2016


Ответы (1)


Я понял это, мне нужно явно указать рельсам ожидать массив в параметрах:

def service_params
  params.require(:service).permit(:name, :sub_service, :material, :parts => [])
end
person Sambhav Sharma    schedule 08.03.2016