首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 5 ActiveRecord::SerializationTypeMismatch通过API创建资源

Rails 5 ActiveRecord::SerializationTypeMismatch通过API创建资源
EN

Stack Overflow用户
提问于 2016-03-08 06:25:03
回答 1查看 1.7K关注 0票数 4

我正在为API使用Rails 5 (beta3)应用程序。我的模型有一个序列化属性,序列化为一个数组。当我从邮递员发送测试请求时,我得到以下错误:

代码语言:javascript
复制
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)

我理解错误的含义,但无法序列化从post请求中获得的数据。在尝试创建请求之前,我不知道如何或在何处序列化。

我的控制器的相关部分:

代码语言:javascript
复制
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

服务模式:

代码语言:javascript
复制
class Service < ApplicationRecord
  serialize :parts,Array
end

我以原始JSON的形式发送请求:

代码语言:javascript
复制
{
  "service" : {
    "name": "Foiling",
    "sub_service":"Full",
    "material":"plastic",
    "parts":["parta","partb","partc"]
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-08 07:50:17

我明白了,我需要显式地告诉rails对params中的数组进行预期:

代码语言:javascript
复制
def service_params
  params.require(:service).permit(:name, :sub_service, :material, :parts => [])
end
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35860462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档