1

オプションリクエストに対してのみリソースのルートをオーバーライドしようとしています。クロスドメイン写真のアップロードリクエストを適切に取得するには、これが必要です。

ルート.rb

map.resources :photos
map.connect '/photos', :controller => 'photos',
   :action => 'options_stuff', :conditions => {:method => :options }

photos_controller.rb

def options_stuff
    puts "got to options@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    set_access_control_headers
    head :ok
    render :nothing => true, :status => 200
end


def set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Max-Age'] = '1000'
    headers['Access-Control-Allow-Headers'] = '*,x-requested-with'
    puts "headers are #{headers}"
end

ただし、必要なコントローラーには到達しません。私は何が間違っているのですか?

ところで、私はそれを行う方法について次の2つの記事をフォローしています:http://www.codeodor.com/index.cfm/2011/7/26/Responding-to-the-OPTIONS-HTTP-method-request-in -Rails-Getting-around-the-Same-Origin-Policy / 3387

https://gist.github.com/832700

更新 多くの苦痛の後、私はコントローラーのアイデアを破棄しましたが、答えが示唆するように機能しました。代わりに、誰かが次のような変更前フィルターを使用することをお勧めします。

設定前

before_filter :set_access_control_headers, :only => [:index]


def set_access_control_headers
  if !request.put? && !request.post? && !request.delete? && !request.get?
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Max-Age'] = '1000'
    headers['Access-Control-Allow-Headers'] = '*,x-requested-with'
    puts "headers are #{headers}"

    render :nothing => true, :status => 200
    return false
  end
end
4

1 に答える 1

3

ルートは上から下に優先され、一番上のルートが最も優先され、一番下のルートが最も低くなると思います。したがって、次のようにルートを切り替えることを検討してください。

map.connect '/photos', :controller => 'photos',
 :action => 'options_stuff', :conditions => {:method => :options }
map.resources :photos
于 2012-11-08T19:46:20.843 に答える