2016-04-25 23 views
2

Mit dem Jsonapi-Ressourcen Juwel (und Rails 4), versuche ich eine Singular (oder Singleton) Ressource zu erstellen (nicht die ID auf der URL für die Standard-Show, Update und delete requests), in meinem Fall für ein Profil des aktuellen (eingeloggten) Benutzers, damit ich ein 'GET/profiles' anstelle eines 'GET/profiles /: id' machen kann.Erstellen von Singular-Ressourcen in Jsonapi-Ressourcen

Ich habe die singulären Weg zum config/routes.rb Datei hinzugefügt:

jsonapi_resource: Profile

gemäß den Dokumenten https://github.com/cerebris/jsonapi-resources#jsonapi_resource

Wie ändere ich die Ressource (ProfileResource) die ID dem current_user zuordnen (über den Kontext)?

Die vorhandenen Demo-Apps demonstrieren nicht die Verwendung der Singular-Ressource, und es scheint keine Dokumentation zu geben, die (explizit) darauf eingeht.

Antwort

1

In Ihrer Profilressource können Sie die Methode self.find_by_key überschreiben, um über den im Kontext gespeicherten Benutzer zu instanziieren, wenn der Schlüssel 'ich' ist. Für den aktuellen Benutzer könnten Sie /profiles/me treffen.

def self.find_by_key(key, options = {}) 
    new(options[:context][:current_user], options[:context]) if key == 'me' 
end 
1

Das funktioniert! (Thks)

der Schlüssel für mich war

config/routes.rb

jsonapi_resource :profile 

und in den app/resources/profile_resource.rb

def self.find_by_key(key, options = {}) 
    model = options[:context][:current_user] 
    fail JSONAPI::Exceptions::RecordNotFound.new(key) if model.nil? 
    new(model, options[:context]) 
end 

und trifft dann (GET , PUT, POST, DELETE) '/ profile' funktioniert gut.