2017-10-16 2 views
0

Ich benutze diese gem und ich habe einige Probleme beim Implementieren einer polymorphen Beziehung.JSONApi funktioniert nicht für polymorphe Beziehungen. Schienen

Ich habe eine polymorphic und products Ressource. Und ich habe auch die passenden Controller und die Route. Ich habe auch die regelmäßigen Active Modelle:

Meine Modelle:

class Product < ActiveRecord::Base 
    include Priceable 

    belongs_to :producible, polymorphic: true 
... 

und ich habe diese Sorge, die ich in den producible Klassen umfassen wie Beer oder Apples

module Producible 
    extend ActiveSupport::Concern 

    included do 
    has_one :product, as: :producible, inverse_of: :producible 

Meine Route:

jsonapi_resource :products

und

/api/products/relationships/producible

Meine Ressourcen (ich hörte ich die polymorphe Ressource als auch benötigen).

class Api::ProductResource < JSONAPI::Resource 
    attributes :producible_type, :plan_id, :is_selling_enabled 

    belongs_to :producible, polymorphic: true 
end 

class Api::ProducibleResource < JSONAPI::Resource 
end 

Meine Controller:

module Api 
    class ProductsController < Api::BaseJsonapiController 
end 
end 

und

module Api 
    class ProduciblesController < Api::BaseJsonapiController 
    end 
end 

Ich bekomme diese Fehlermeldung, wenn ich versuche, auf die Route oben aufgeführt zu navigieren:

{ 
"errors": [ 
{ 
"title": "Missing Parameter", 
"detail": "The required parameter, product_id, is missing.", 
"code": "106", 
"status": "400" 
} 
] 
} 

es ist seltsam da scheint die Route nicht zu verlangen eine product_id richtig?

+0

Haben Sie eine '' 'product_id''' in Ihrem herstellbaren Modelle? –

+0

Also der Fehler war die Route, die ich verwendet habe. Ich denke, die Verwendung von 'jsonapi_resource: products' anstelle von' jsonapi_resources: products' führte dazu, dass dies aus irgendeinem Grund fehlschlug. – Jwan622

+0

Ich habe eine 'productible_id' in meiner' Produkt' Tabelle. – Jwan622

Antwort

0

Wie der Fehler sagte, gibt es in Ihren produzierbaren Modellen keine product_id. So funktioniert Ihre Beziehung belongs_to :producible, polymorphic: true nicht.

Ich glaube, Sie möchten ein producible_id in Ihrem Produktmodell haben. In diesem Fall müssen Sie Ihre belongs_to Beziehung in eine has_one eine und setzen Sie Ihre belongs_to in das herstellbare Modell.

Wenn Sie irgendwelche Probleme haben, empfehle ich Ihnen, die offizielle Rails Dokumentation über zu lesen.

Ich hoffe, dies wird Ihnen helfen,

Verwandte Themen