从Flex发送AMF对象到Rails会破坏相关模型

时间:2009-03-11 21:13:13

标签: ruby-on-rails flex amf weborb

我们正在开发一个使用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_attributesRole.skip_time_zone_conversion_for_attributes = [],应该如此)但我感觉WebORB正在绕过这并强制将其改为零。

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

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

1 个答案:

答案 0 :(得分:0)

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

相关问题