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?