2009-03-11 5 views
-1

Wir arbeiten an einem Projekt, das Flex und Schienen mit WebORB verwendet. Alles war gut und schön, bis wir anfingen, das Frontend und das Backend zusammen zu binden.Das Senden von AMF-Objekt an Rails von Flex beschädigt das zugehörige Modell

Wir haben einen Dienst für die Interaktion mit Benutzern und einen anderen für die Sitzung erstellt.

SessionService.rb

class SessionService 
    def view_session 
    session = RequestContext.get_session 

    if session[:user_id] 
     user = User.find_by_id(session[:user_id], :include => [:contact, {:roles => :permissions}]) 
    else 
     user = User.find_by_username("anonymous", :include => [:contact, {:roles => :permissions}]) 
    end 

    user 
    end 
end 

UserService.rb

class UserService 
    def register_user user 
    user.save 

    session = RequestContext.get_session 
    session[:user_id] = user.id 
    RequestContext.set_session session 

    return true 
    end 
end 

User.as

package com.XXX.XXXXX.vo 
{ 
    [Bindable] 
    [RemoteClass(alias="com.XXX.XXXXX.vo.User")] 
    public class User 
    { 
     ... 
     public var roles:Array; 
     ... 
    } 
} 

Wenn mit Flex jede Methode aufrufen, funktioniert alles, bis register_user fein ist mit einem Benutzerobjekt namens in weitergegeben werden. Der Benutzer erstellt wird und die Sitzung aktualisiert wird, was schief geht ist, dass jede Methode ruft danach haben einen Nebeneffekt, dass User.find(XX).roles[XX].skip_time_zone_conversion_for_attributes ist jetzt Nil, was create_time_zone_conversion_attribute? in activerecord/lib/activerecord/attribute_methods.rb schlägt fehl, wenn versuchen, include? darauf anzurufen.

Und seit create_time_zone_conversion_attribute? aufgerufen wird, wenn method_missing aufgerufen wird, verursacht der direkte Zugriff auf jedes Attribut diesen Fehler. Das wäre kein Problem, außer für die :include => [..., :roles...], die bewirkt, dass die Rollen in AMF serialisiert werden und wenn es versucht, die Attribute zu serialisieren, bombardiert es.

Von dem, was ich sammeln in attribute_methods.rb, sollte es nicht möglich sein, skip_time_zone_conversion_for_attributes in einer Instanz zu ändern (Role.skip_time_zone_conversion_for_attributes = [], wie es sein sollte), aber ich habe das Gefühl, dass WebORB dies zu umgehen und forceibly es null sein zu ändern.

Wir haben auf die Weitergabe von Nicht-Modell-Klassen umgestellt, aber das ist nicht das, was wir wollen.

Wäre es möglich herauszufinden, welcher Code in WebORB skip_time_zone_conversion_for_attributes für alle Instanzen eines Modells ändert, aber nicht die Modellklasse selbst?

Antwort

0

Wir hatten das gleiche Problem, die einzige Lösung, die wir gefunden haben, war, keine Flex-Objekte an Rails zu übergeben, die Assoziationen haben.

Verwandte Themen