1

シンプルな Rails 3 アプリケーションで新しいタスクを作成するフォームを Sencha Touch で作成しようとしています。基本的に、ネストされた 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"} }

しかし、Sencha からの Ajax POST は次のように送信します。

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

次のようにdefaultHeadersを使用しようとすると:

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

次のように投稿します。

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

これを適切に処理する方法について何か考えはありますか?

4

2 に答える 2

4

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 本体はほぼ正しいように見えます。

于 2011-01-14T22:43:35.707 に答える
0

暫定的な回答として、Sencha Touch Ext.data.* パッケージの使用を検討しましたか? そこには、サーバーとクライアント アプリ間のすべての CRUD 操作を処理し、モデル フィールドの更新、検証、関連付けなどを処理する REST プロキシがあります。

それはあなたの正確な質問に答えるものではありませんが、それについては今見ていきますが、考えるべきことがあります。

于 2011-01-14T22:25:20.950 に答える