1

異なるサブドメインのBackboneアプリからRailsアプリにPOST、PUT、およびDELETEを実行するための最良の方法はどれですか?

RailsアプリからBackboneを使用していくつかのデータをフェッチしようとしましたが、機能します。BackbonetoRailsアプリで新しいコンテンツを保存しようとしました。

PUT(データベースに作成されたモデルの更新)に実際の問題があります。理由はわかりませんが、バックボーンアプリで次のように実行すると、book.save()

そして、この本はデータベースにすでに存在するモデルであり、Rails APPにPUT請願書を送る代わりに、データなしでOPTIONS請願書を送っています。

理想的には、BackboneアプリからRailsアプリにPUT請願書を送信したいので、Railsアプリで次のようなことができます。

Book.update_attributes params [:book]

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

4

1 に答える 1

1

post または get ではないメソッドの場合、クライアントは 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

次に、routes.rb でオプション リクエストを処理する必要があります。

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

そして、リクエストを処理するコントローラー(私にとってはApplicationController)

def options
  allow_cross_domain
  render :text => "", :layout => false
end
于 2012-04-20T17:13:33.997 に答える