2011-02-02 42 views
1

如何控制在RemoteObject方法中传递哪些参数?我注意到,当我直接下载并this site运行代码,保存在下面的参数对象的结果集被传递回:在rubyamf中传递的控制参数(rails + flex)

Processing PostsController#save (for 127.0.0.1 at 2011-02-01 23:34:55) [POST] 
Parameters: {0=>{"post"=>#<Post id: nil, title: "a", body: "b", created_at: nil, updated_at: nil>}, "post"=>#<Post id: nil, title: "a", body: "b", created_at: nil, updated_at: nil>} 

,而我自己的项目(主要涉及以下相同的步骤,该教程)使保存,给痕迹等

Processing CarsController#save (for 127.0.0.1 at 2011-02-01 22:34:56) [POST] 
Parameters: {0=>{"car"=>#<Car id: nil, user_id: 0, name: "asdfCar", body_id: 3, theme: nil, deleted: nil, photo_file_name: nil, photo_content_type: nil, photo_file_size: nil, photo_updated_at: nil, created_at: nil, updated_at: nil>}} 

为了澄清,所不同的是,该请求到posts控制器似乎以接收后的两个副本,一个作为PARAMS [0] [“后”]和一个作为params [“post”],而我的代码只给出一个。

,似乎定义的RemoteObject调用的唯一的代码是

<mx:RemoteObject id="postRO" destination="rubyamf" endpoint="rubyamf/gateway" source="PostsController" showBusyCursor="true" fault="onFault(event)"> 
    <mx:method name="index" result="onIndexResult(event)"/> 
    <mx:method name="save" result="onSaveResult(event)"/> 
    <mx:method name="destroy" result="onDestroyResult(event)"/> 
</mx:RemoteObject> 

private function onAddPost(event:MouseEvent):void 
     { 
      var post:PostVO = new PostVO(); 
      post.title = addTitleText.text; 
      post.body = addBodyText.text; 
      post.comments = new Array(); 
      postRO.getOperation("save").send({post:post}); 
     } 

,然后将值对象定义

package com.unitedmindset.vo 
{ 
    [RemoteClass(alias="PostVO")] 
    [Bindable] 
    public class PostVO 
    { 
     public function PostVO() 
     { 
     } 

     public var id:int; 
     public var title:String; 
     public var body:String; 
     public var createdAt:Date; 
     public var updatedAt:Date; 

     public var comments:Array; 

    } 
} 

,而我自己的代码看起来与该死的类似

private function onAddCar(event:MouseEvent):void 
    { 
     var car:CarVO = new CarVO(); 
     car.name = addNameText.text; 
     car.bodyId = int(addBodyIdText.text); 
     car.componentInstances = new Array(); 
     carRO.getOperation("save").send({car:car}); 
    } 

    <mx:RemoteObject id="carRO" destination="rubyamf" endpoint="http://localhost:3000/rubyamf/gateway" source="CarsController" showBusyCursor="true" fault="onFault(event)"> 
     <mx:method name="index" result="onIndexResult(event)"/> 
     <mx:method name="save" result="onSaveResult(event)"/> 
     <mx:method name="destroy" result="onDestroyResult(event)"/> 
    </mx:RemoteObject> 
    <mx:RemoteObject id="componentInstanceRO" destination="rubyamf" endpoint="http://localhost:3000/rubyamf/gateway" source="ComponentInstancesController" showBusyCursor="true" fault="onFault(event)"> 
     <mx:method name="save" result="onCreateComponentInstanceResult(event)"/> 
    </mx:RemoteObject> 

package com.foo.vo 
{ 
    [RemoteClass(alias="CarVO")] 
    [Bindable] 
    public class CarVO 
    { 
     public function CarVO() 
     { 
     } 

     public var id:int; 
     public var userId:int; 
     public var name:String; 
     public var bodyId:int; 

     public var createdAt:Date; 
     public var updatedAt:Date; 

     public var componentInstances:Array; 
    } 
} 

我假设有某种配置设置(大概在Flex中),但我无法指出它是什么。任何建议在哪里看?谢谢。

回答

1

解决了我的问题。在rubyamf_config.rb(在config文件夹中),需要添加一行:

ParameterMappings.scaffolding = true 

所以,是的,设置在轨道,而不是弯曲。我猜想rails会启动,然后当flash启动时,它会询问rails需要什么格式的响应(这很有道理,因为它也必须处理ClassMappings),然后使用商定的格式将帖子发送到rails应用程序。