ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 13 Jun 2013, 15:21 
Offline
Lehrling

Registriert: 13 Mai 2009, 11:18
Beiträge: 57
Hallo zusammen,

ich steh momentan vor einem mir nicht lösbaren Problem. Ich nutze einen ActiveSerializer, um JSON für ein Model zu generieren, das über eine API zurückgegeben wird. Soweit kein Problem.

Das Problem ist, dass das Model eine Baumstruktur hat und ich erreich will, dass ich vom Model mit der ID X nicht nur die Daten bekomme, sondern zusätzlich auch noch die IDs der direkten Kinder. Jetzt gibt es in den ActiveSerializern ja die Möglichkeit per "has_many" eine Beziehung anzugeben und auch welche Felder davon mit serialisiert werden. Allerdings werden nicht nur die direkten Kinder mit serialisiert, sondern auch die Kinder der Kinder, deren Kinder, usw.

Das ist bei einem Baum mit knapp 25.000 Einträgen schon ein wenig viel und äußert sich nicht nur in enormen Ladezeiten, sondern auch darin, dass ich mit den Daten nichts anfangen kann.

Ich müsste also in der Lage sein, dem Serializer zu sagen, dass er nur die direkten Kinder mit der Has-Many holen soll und alle anderen in Ruhe lassen soll. Aber genau da weiß ich nicht, wie ich vorgehen soll.

Eine andere Lösung wäre, in der entsprechenden Controller-Action die Kinder zu holen und an das Model manuell ranzukleben, was aber ein wenig umständlich ist. Ich könnte zwar so auf den Serializer verzichten, aber müsste von Hand die Kinder mit reinbauen, was nicht schön ist.

Hat da jemand eine Idee oder einen Gedankengang, auf dem ich aufbauen kann?

Danke & viele Grüße
Martin


Nach oben
 Profil  
 
BeitragVerfasst: 13 Jun 2013, 15:31 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Vielleicht hilft dir http://railscasts.com/episodes/409-active-model-serializers weiter?

Müsstest dann halt bischen etwas umbauen, aber du hättest keine Dinger im Controller die dort nichts zu suchen hätten :D

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 13 Jun 2013, 18:16 
Offline
Lehrling

Registriert: 13 Mai 2009, 11:18
Beiträge: 57
Hi,

danke, den hab ich mir schon angeschaut, allerdings keinen Hinweis darauf gefunden, wie ich meine has_many einschränken kann. Übersehe ich da was?

Das Problem ist, dass an dem Model das awesome_nested_set hängt und dass dazu führt, dass über die has_many automatisch alle Kinder geholt werden, ich will aber nur die direkten.

Ich hab noch ein wenig in der Doku nachgeforscht und scheinbar gibt es eine Methode "association_ids", die nur die IDs zurückgibt. Ich werde mal versuchen, ob ich das mit in den Serializer mit einbauen kann.

Aber eine wirkliche Lösung ist das auch nicht.


Viele Grüße
Martin


Nach oben
 Profil  
 
BeitragVerfasst: 13 Jun 2013, 20:00 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906
In der Doku vom gem steht ein Hinweis darauf, wie du dein Problem vielleicht lösen könntest. Erstelle eine Methode mit dem namen der Assoziation und gib dort die Objecte zurück, die du serialisieren möchtest. Die Assoziation musst du trotzdem noch mit has_many definieren.

_________________
Grüße
Jack


Nach oben
 Profil  
 
BeitragVerfasst: 13 Jun 2013, 22:52 
Offline
Lehrling

Registriert: 13 Mai 2009, 11:18
Beiträge: 57
slowjack2k hat geschrieben:
In der Doku vom gem steht ein Hinweis darauf, wie du dein Problem vielleicht lösen könntest. Erstelle eine Methode mit dem namen der Assoziation und gib dort die Objecte zurück, die du serialisieren möchtest. Die Assoziation musst du trotzdem noch mit has_many definieren.


Hi,

danke für den Tip, der hat zwar nicht geholfen, aber dadurch bin ich auf mein eigentliches Problem gestoßen ;) Ich habe einen allgemeinen Serializer, von dem andere Serializer erben und der setzt z.B. "embed :id, include: true". Genau dieses "include: true" bewirkt, dass zwar nur die IDs der Assoziationen angehängt werden, gleichzeitig aber auch die Objekte mit geladen und aufgenommen werden. Einmal true auf false stellen und schon ist mein Problem erledigt ;)

Manchmal sieht man den Wald vor lauter Bäumen nicht, an der falschen Stelle gesucht die ganze Zeit ;)

Danke euch :-)

Viele Grüße
Martin


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron