代码之家  ›  专栏  ›  技术社区  ›  Samuel

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

  •  -1
  • Samuel  · 技术社区  · 17 年前

    我们正在进行一个使用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;
            ...
        }
    }
    

    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? 在上面。

    当被调用时 method_missing :include => [..., :roles...] 这导致角色被序列化为 AMF

    从我收集到的 attribute_methods.rb ,应该不可能更改 skip_time_zone_conversion_for_attributes 在一个实例中( Role.skip_time_zone_conversion_for_attributes = []

    我们已经转向传递非模型类,但这不是我们想要的。

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

    1 回复  |  直到 17 年前
        1
  •  0
  •   Davlamin    17 年前

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

    推荐文章