ruby-on-rails - 通过 API 创建资源时 Rails 5 ActiveRecord::SerializationTypeMismatch

标签 ruby-on-rails ruby activerecord serialization ruby-on-rails-5

我正在为 API 使用 Rails 5 (beta3) 应用程序。我的模型有一个序列化属性,序列化为一个数组。当我从 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)

我明白错误的含义,但我无法序列化从发布请求中获得的数据。在尝试创建请求之前,我不知道如何或在哪里序列化它。

我的 Controller 的相关部分:

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

我以原始 JSON 格式发送请求:

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

最佳答案

我想通了,我需要明确地告诉 rails 期待参数中的数组:

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

关于ruby-on-rails - 通过 API 创建资源时 Rails 5 ActiveRecord::SerializationTypeMismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35860462/

相关文章:

ruby-on-rails - rails : mass-assignment security concern with belongs_to relationships

ruby-on-rails - 如何在模型中调用 number_helper?

ruby-on-rails - ArgumentError(缺少必需的 :bucket option):

activerecord - 如何在 Yii 中验证价格(金额)mySql 十进制列?

ruby-on-rails - 多态关联 foreign_type 使用 STI 类设置祖先类型而不是当前类型

ruby-on-rails - Ruby 错误(未初始化的常量 User::Relationship)

ruby-on-rails - 我如何总结多对多的值(value)?

ruby 鞋。如何包含 Windows 依赖项

ruby - 理解 Ruby 中单例方法如何工作的问题

ruby-on-rails - 跳过相关对象的验证 - rails activerecord