-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 オブジェクトで が呼び出されるまで、すべて正常に動作します。ユーザーが作成され、セッションが更新されます。問題は、この後のメソッド呼び出しが nil にregister_userなる副作用を持つことです。User.find(XX).roles[XX].skip_time_zone_conversion_for_attributesそれを呼び出そうとすると失敗しcreate_time_zone_conversion_attribute?ます。activerecord/lib/activerecord/attribute_methods.rbinclude?

また、create_time_zone_conversion_attribute?が呼び出されたときにmethod_missingが呼び出されるため、任意の属性に直接アクセスすると、このエラーが発生します。:include => [..., :roles...]これは、ロールがAMFにシリアル化され、属性をシリアル化しようとすると爆破されることを除けば、問題にはなりません。

私が収集したものから、インスタンスでattribute_methods.rb変更することはできないはずです(そうあるべきです)が、WebORBはこれをバイパスして強制的にnilに変更していると感じています。skip_time_zone_conversion_for_attributesRole.skip_time_zone_conversion_for_attributes = []

非モデル クラスを渡すように切り替えましたが、これは私たちが望んでいるものではありません。

skip_time_zone_conversion_for_attributesモデル クラス自体ではなく、モデルのすべてのインスタンスに対してWebORB のどのコードが変更されているかを調べることは可能でしょうか?

4

1 に答える 1

0

私たちも同じ問題を抱えていました。私たちが見つけた唯一の解決策は、関連付けを持つ Rails に Flex オブジェクトを渡さないことでした。

于 2009-03-18T21:36:02.493 に答える