Мы работаем над проектом, который использует Flex и rails с WebORB . Все было хорошо и модно, пока мы не начали связывать фронтенд и бэкэндс вместе.
Мы создали сервис для взаимодействия с пользователями и еще один для сеанса.
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;
...
}
}
При вызове любого метода с помощью Flex все работает нормально до тех пор, пока register_user
не будет вызван с передаваемым объектом User. Пользователь создается и сеанс обновляется, что приводит к ошибкам в том, что любой вызов метода после этого имеет сторону эффект, что User.find(XX).roles[XX].skip_time_zone_conversion_for_attributes
теперь равен nil, что приводит к сбою create_time_zone_conversion_attribute?
в activerecord/lib/activerecord/attribute_methods.rb
при попытке вызвать include?
для него.
И так как create_time_zone_conversion_attribute?
вызывается при вызове method_missing
, прямой доступ к любому атрибуту вызывает эту ошибку. Это не будет проблемой, за исключением :include => [..., :roles...]
, который приводит к сериализации ролей в AMF , а когда он пытается сериализовать атрибуты, он взрывается.
Из того, что я собираю в attribute_methods.rb
, не должно быть возможности изменить skip_time_zone_conversion_for_attributes
в экземпляре (Role.skip_time_zone_conversion_for_attributes = []
, как и должно быть), но у меня есть ощущение, что WebORB обходит это и принудительно изменяет его на быть ноль.
Мы перешли к прохождению классов, не являющихся моделями, но это не то, что нам нужно.
Можно ли узнать, какой код в WebORB изменяется skip_time_zone_conversion_for_attributes
для всех экземпляров модели, но не для самого класса модели?