2012-04-20 13 views
1

Whickは、バックボーンアプリから異なるサブドメインのRailsアプリにPOST、PUT、DELETEする最良の方法ですか?バックボーンアプリから異なるサブドメインのRailsアプリにPOST、PUT、DELETEするにはどうすればいいですか?

私は、Railsアプリケーションからバックボーンを使っていくつかのデータを取得しようとしました。 私はBackbone to Railsアプリで新しいコンテンツを保存しようとしました。

PUTに問題があります(データベースで作成したモデルを更新しています)。 私はなぜ知らないが、私は私のバックボーンアプリで何かやるとき: book.save()

をそして本が代わりにsendind PUTの請願を、既にデータベースにexistisモデルであり、 Rails APP、OPTIONS申請書を送付していますが、データはありません。

理想的には、私はRailsのアプリにバックボーンアプリからPUTの嘆願書を送りたいので、私は私のRailsアプリでこのような何かを行うことができます。

Book.update_attributes paramsは[:ブック]

Rails AppとBackboneアプリケーションは、同じトップレベルドメイン上の異なるサブドメインにあります。

答えて

1

投稿または取得しないメソッドの場合、クライアントはOPTIONS要求を送信して、クロスドメインが許可されているものを判断します。 あなたには2つのものが必要です。 クロスドメインが正常であることをクライアントに伝えるために正しい応答ヘッダーで応答する方法が必要です。私はクロスドメインのニーズがシステム全体であるので、私のApplicationControllerでafter_filterを作成します。

after_filter :allow_cross_domain 

def allow_cross_domain 
    headers["Access-Control-Allow-Origin"] = request.env['HTTP_ORIGIN'] 
    headers["Access-Control-Request-Method"] = "*" 
    headers["Access-Control-Allow-Methods"] = "PUT, OPTIONS, GET, DELETE, POST" 
    headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type' 
    headers["Access-Control-Max-Age"] = 1728000 
end 

次はあなたが選択肢が(私のためApplicationControllerに)あなたのroutes.rbを

match "*options", controller: "application", action: "options", constraints: { method: "OPTIONS" } 

では、要求ハンドラ]しますコントローラに

def options 
    allow_cross_domain 
    render :text => "", :layout => false 
end 
+0

Unfortunallyを を要求処理する必要があります私はこの方法で試してきましたが、何らかの理由で、私はオプションのアクションでparamsを取得しません。適切なroutes.rb行は次のとおりです:match '/books.(:format)/:id'、:controller => 'books'、:action => 'options'、:constraints => {:method => 'OPTIONS' }そして、私のbooks_controllerには次のものがあります:def options set_access_control_headersデバッガ1 respond_to do | format | {"format" => "json"、 "action" => "options"、 "id" => "6"、 "controller" => "books" }しかし、私はBackboneのタイトルを更新しました。このparamsはここにはありません。あなたの助けをありがとう – Terry

+0

クロスドメインのためのバックボーンから2つの要求があります。 1つはOPTIONS要求です。レールアプリは、クライアントに何が許可されているかを伝える適切なヘッダーで応答する以外は何もしません。クライアントは元のPUT要求を送信します。そこでは、通常のリソース処理と書籍の更新が行われます。 –

関連する問題