Sench Touch (Extjs) неправильно размещает вложенное приложение JSON в Rails 3 - PullRequest
1 голос
/ 15 января 2011

Я пытаюсь создать форму с Sencha Touch, которая создаст новую задачу в простом приложении на Rails 3. Я по сути добавляю вложенный JSON к этому вопросу .

Чтобы упростить тестирование, я жестко запрограммировал параметры в запросе. Приложение Rails было создано с использованием:

$rails g scaffold task name:string

Запрос Sencha Touch Ajax:

Ext.Ajax.request({
 url:'/tasks',
 method:'POST',
 params: { 
  task: { name: "Hello World" }
  }

Rails ожидает, что хэш params будет выглядеть так:

Parameters: { "task"=>{"name"=>"Hello World"} }

Но Ajax POST от Sencha отправляет это так:

Parameters: {"task"=>"[object Object]"}

Когда я пытаюсь использовать defaultHeaders как:

Ext.Ajax.defaultHeaders = {
  'Content-Type': 'application/json'
}

Это сообщение, как это:

Parameters: {"_json"=>"task=%5Bobject%20Object%5D"}

Есть мысли, как правильно с этим справиться?

Ответы [ 2 ]

4 голосов
/ 15 января 2011

Согласно http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters, Rails создает «вложенные» параметры, когда видит поля формы, используя синтаксис [...].

Ext.Ajax.request({
    url:'/tasks',
    method:'POST',
    params: {
        'task[name]':'Hello World'
    }
});

У меня нет сервера Rails для проверки этогопротив, но тело POST выглядит примерно правильно.

0 голосов
/ 15 января 2011

В качестве промежуточного ответа, вы рассматривали возможность использования пакета Sencha Touch Ext.data. *? Там есть REST-прокси, который будет обрабатывать все операции CRUD между вашим сервером и клиентским приложением и заботиться об обновлениях полей модели, валидации, связях и т. Д.

Это не ответит на ваш точный вопрос, который я сейчас рассмотрю, но кое-что подумать.

...