In einer Ruby 2/Rails 4 app versuche ich Acts-als-Taggable-on in Verbindung mit Active_Model_Serializers zu verwenden, um ein JSON zu erstellen API, die meine Tags zusammen mit anderen Modellparametern ausgeben würde.Fehler beim Laden von JSON für act-as-taggable-Tags mit Active-Model-Serializern
Zuerst einige Hintergrund/Motivation für dieses Problem: Die JSON wird in ember/ember-Daten, die zum Zeitpunkt dieses Schreibens hat die Unterstützung für eingebettete Datensätze in JSON entfernt. Es gibt eine vermeintliche Behebung in der documentation darüber, aber ich finde es ungeschickt und habe es auch nicht wirklich zur Arbeit gebracht. Da ich ein Ember-Neuling bin und ein wenig mehr mit Rails vertraut bin, denke ich, dass ich versuchen werde, das Problem auf eine andere Art und Weise zu lösen, indem ich den Tag-Datensatz neben den Dokumenten-Datensatz lade. Ich mag diese Lösung besser, weil sie für meine Anwendung sinnvoller ist, aber ich kann das auch nicht funktionieren.
Hier ist ein Beispiel: Nehmen wir an, ich ein Dokument Modell, das wirkt-as-markierbare-on verwendet:
class Document < ActiveRecord::Base
acts_as_taggable
# other code omitted
Ich habe die Datenbank mit einem Dokument mit einem Tag aufgebaut. Nun betrachten wir die folgenden Fälle:
1. Volles Objekt eingefügt: Mit dem folgenden Serializer:
class DocumentSerializer < ActiveModel::Serializer
attributes :id
has_many :tags
Meine JSON hat folgendes Format (mit Rails 4 UUID):
{
"documents": [
{
"id": "c41460fa-2427-11e3-8702-0800270f33f4",
"tags": [
{
"id": "a33fc396-2428-11e3-8eeb-0800270f33f4",
"name": "test"
}
]
}
]
}
2. ID Einbetten: Verwenden des Serialisierers
class DocumentSerializer < ActiveModel::Serializer
attributes :id
has_many :tags, embed: :id
jetzt
Meine JSON wie folgt aussieht:
{
"documents": [
{
"id": "c41460fa-2427-11e3-8702-0800270f33f4",
"tag_ids": [
"a33fc396-2428-11e3-8eeb-0800270f33f4"
]
}
]
}
3. ID Einbetten mit Tags Sideload: Nach active_model_serializers Dokumentation, sollte ich in der Lage sein
class DocumentSerializer < ActiveModel::Serializer
attributes :id
has_many :tags, embed: :id, include: true
zu tun, aber das funktioniert nicht . Stattdessen erhalte ich eine NoMethodError:
undefined method `object' for #<ActsAsTaggableOn::Tag:0x007f258cf1db38>
Ich habe versucht, für dieses Problem gesucht, aber habe nichts nützlich bisher gefunden. Ich konnte auch keine Dokumentation zu beiden Edelsteinen finden, die sich auf den anderen Edelstein beziehen. Mein Verdacht im Moment, dass es etwas damit zu tun hat, wie Acts-als-Taggable-On implementiert ist, dass es keine direkte has_many-Beziehung ist? Kann irgendjemand etwas zu diesem Thema beitragen? Danke im Voraus!
Kann ich dich fragen, wie Beziehungen zu handhaben mit glut? Wie können Sie ein Dokument zum Dokument hinzufügen? CreateRecord? –