-1

我们正在开发一个将 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 调用任何方法时,一切正常,直到调用传入的 User 对象。创建了用户并更新了会话,问题是在此之后的任何方法调用都会产生现在为零register_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调用,直接访问任何属性都会导致此错误。这不会是一个问题,除非:include => [..., :roles...]它会导致角色被序列化到AMF中,并且当它尝试序列化属性时,它会爆炸。

从我收集到的信息attribute_methods.rb来看,应该不可能skip_time_zone_conversion_for_attributes在一个实例中进行更改(Role.skip_time_zone_conversion_for_attributes = []应该是这样),但我感觉 WebORB 正在绕过这个并强行将其更改为 nil。

我们已经切换到传递非模型类,但这不是我们想要的。

是否有可能找出 WebORB 中的哪些代码正在skip_time_zone_conversion_for_attributes针对模型的所有实例进行更改,而不是针对模型类本身?

4

1 回答 1

0

我们遇到了同样的问题,我们找到的唯一解决方案是不将 Flex 对象传递给具有关联的 Rails。

于 2009-03-18T21:36:02.493 回答