1

编辑:我在 Rails 的拉取请求中重新添加了 options 方法,现在应该可以使用了。下面的答案应该不再需要了。调用process(:options, path, **args)以执行选项请求。

如果需要,请参阅提交 1f979184efc27e73f42c5d86c7f19437c6719612 了解更多信息。

我已经阅读了其他答案,但它们似乎都不适用于 Rails 5。令人惊讶的是,Rails 不仅提供了选项方法,而且我们在这里。当然,如果您可以使用 xdomain,您可能应该(编辑:我不再持有这种观点,CORS 有优势)因为它更快(没有预检检查加倍延迟!),更容易(不需要愚蠢的标头/HTTP 方法!),并且得到更多支持(基本上在任何地方都可以使用!),但有时您只需要支持 CORS,而有关 CORS gem 的某些内容使其不适用于您。

4

1 回答 1

1

config/routes.rb文件的顶部放置以下内容:

match "/example/",
  controller: "example_controller",
  action: "options_request",
  via: [:options]

在你的控制器中写:

def options_request
  # Your code goes here.
end

如果您对编写集成测试感兴趣,那么该process方法周围会有一些错误信息,这实际上不是公共方法。为了支持来自集成测试的 OPTIONS 请求,请创建一个初始化程序(我的在:config/initializers/integration_test_overrides.rb因为我覆盖了很多东西)并添加以下代码:

class ActionDispatch::Integration::Session

  def http_options_request(path)
    process(:options, path)
  end

end

这样您就可以http_options_request从集成测试中调用。

于 2016-10-03T20:43:14.817 回答