2012-04-20 1 views
1

Whick은 다른 하위 도메인의 Backbone 앱에서 Rails 앱으로 POST, PUT 및 DELETE하는 가장 좋은 방법입니까?Backbone 앱에서 다른 하위 도메인의 Rails 앱으로 POST, PUT 및 DELETE하는 방법은 무엇입니까?

레일즈 앱에서 백본으로 일부 데이터를 가져 오려고했는데 제대로 작동했습니다. Backbone to Rails 앱으로 새 콘텐츠를 저장하려고했습니다.

PUT (데이터베이스에서 생성 된 모델 업데이트)에 실제 문제가 있습니다. 나는 이유는 모르겠지만, 내가 좋아하는 내 백본 애플 리케이션 뭔가를 수행 할 때 book.save()

그리고 책 대신에 sendind 풋 청원의, 이미 데이터베이스에 existis 모델이다 Rails APP, OPTIONS 청원서를 보내는 중이고 데이터가 없습니다.

이상적으로는, 나는 레일 응용 프로그램에 백본 응용 프로그램에서 PUT 청원서를 보내려면, 그래서 난 내 레일 응용 프로그램에서이 같은 작업을 수행 할 수 있습니다

Book.update_attributes의 PARAMS [: 책]

을 Rails App과 Backbone App은 동일한 최상위 도메인의 다른 하위 도메인에 있습니다.

답변

1

게시 또는 수신하지 않는 방법의 경우 클라이언트는 OPTIONS 요청을 전송하여 상호 도메인 허용이 무엇인지 결정합니다. 두 가지가 필요합니다. 올바른 도메인을 확인했다고 클라이언트에게 알리는 올바른 응답 헤더로 응답하는 방법이 필요합니다. 내 상호 도메인 요구 사항은 시스템 전체에 걸쳐 있으므로 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

하지만 회로를 를 요청 처리해야 나는이 방법을 시도했는데 어떤 이유로 든 옵션 액션에서 params를 얻지 못했습니다. 정확한 routes.rb 줄은 match '/books.(:format)/:id', : 컨트롤러 => 'books', : action => 'options', : constraints => {: method => 'OPTIONS' } 그리고 내 books_controller에 : def 옵션 set_access_control_headers 디버거 1 respond_to 할 | 형식 | { "format"=> "json", "action"=> "options", "id"=> "6", "controller"=> "books" } 그러나 백본에서 제목을 업데이트했으며이 매개 변수는 여기에 없습니다. 도움을 주셔서 감사합니다 – Terry

+0

크로스 도메인에 대한 백본에서 두 가지 요청이있을 것입니다. 첫 번째는 OPTIONS 요청입니다. 레일 응용 프로그램은 클라이언트에게 허용 된 내용을 알려주는 적절한 헤더로 응답하는 것 외에는 아무 것도하지 않습니다. 그러면 클라이언트는 원래 PUT 요청을 보냅니다. 그것이 정상적인 리소스 처리를 수행하고 책을 업데이트하는 곳입니다. –

관련 문제