2

我正在使用Rails 5(beta3)應用程序的API。我的模型具有序列化屬性,序列化爲數組。當我把從郵差測試請求,我得到以下錯誤:Rails 5 ActiveRecord :: SerializationTypeMismatch通過API創建資源時

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 

我發送請求爲原料JSON:

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

你如何測試請求的樣子?你在請求中發送數組還是字符串?在問題中添加了 – spickermann

+0

。 –

回答

2

我想通了,我需要明確地告訴導軌期望在params中的數組:

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