我们正在开发一个使用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
现在为零的副作用,导致create_time_zone_conversion_attribute?
中的activerecord/lib/activerecord/attribute_methods.rb
在尝试呼叫include?
时失败。
由于在调用create_time_zone_conversion_attribute?
时调用method_missing
,因此直接访问任何属性都会导致此错误。除了导致角色被序列化为AMF的:include => [..., :roles...]
以及当它尝试序列化属性时,它就不会出现问题,它会爆炸。
根据我在attribute_methods.rb
中收集的信息,不应该在实例中更改skip_time_zone_conversion_for_attributes
(Role.skip_time_zone_conversion_for_attributes = []
,应该如此)但我感觉WebORB正在绕过这并强制将其改为零。
我们已经切换到传递非模型类,但这不是我们想要的。
是否有可能找出WebORB中的哪些代码正在为模型的所有实例而不是模型类本身更改skip_time_zone_conversion_for_attributes
?
答案 0 :(得分:0)
我们遇到了同样的问题,我们找到的唯一解决方案是不将Flex对象传递给具有关联的Rails。