Управляющие параметры передаются в rubyamf (rails + flex) - PullRequest
1 голос
/ 02 февраля 2011

Как мне контролировать, какие параметры передаются в методе RemoteObject?Я заметил, что когда я непосредственно загружаю и запускаю код с этого сайта , сохранение объекта приводит к тому, что следующий набор параметров возвращается:

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>}}

Чтобы уточнить, разница в том, что запросы к контроллеру сообщений, кажется, получают две копии сообщения, по одному в качестве параметров[0] ["post"] и один как 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 Ответ

1 голос
/ 03 февраля 2011

Решил мою проблему. В rubyamf_config.rb (в папке config) необходимо добавить строку:

ParameterMappings.scaffolding = true

Итак, да, настройка была в рельсах, а не в прогибе. Я предполагаю, что rails запускается, затем, когда запускается flash, он спрашивает rails, в каком формате он хочет получить ответы (что имеет смысл, поскольку он также должен иметь дело с ClassMappings), затем флэш-сообщения отправляются в приложение rails, используя согласованный формат. 1005 *

...