:via => [:options]在rails路线上的ruby中

时间:2013-04-25 18:43:31

标签: ruby-on-rails-3

在一些Rails应用程序中,我在routes.rb

中看到了这一点
root :to => "home#index", :via => [:get]
root :to => "accounts#manage", :via => [:options]

我无法理解这两个根URL是如何存在的。谷歌搜索也没有帮助清除:选项参数。有人可以帮忙吗?

由于

3 个答案:

答案 0 :(得分:7)

根据HTTP spec(并进一步解释here),有一个OPTIONS动词 - 路由可以支持。

使用OPTIONS的动力是请求Web服务API的文档;结果旨在提供有关如何使用API​​的信息。

ActionDispatch::Routing::HTTP_METHODS
=> [:get, :head, :post, :put, :delete, :options]

要回到您的问题,在典型的浏览器GET请求中,将使用第一条路线。当发出OPTIONS请求时,将使用第二条路线。

答案 1 :(得分:1)

您可以使用:via选项将请求约束为一个或多个HTTP方法

请参阅the rails guide on routing

允许

:post:get:put:delete:options:head:any作为值这个选项。

a blog post中所述,OPTIONS只是另一个支持CORS requests的HTTP动词(一种制作跨域AJAX请求的方法)。

更新发现了一篇解释:options

的博客文章

答案 2 :(得分:1)

对于Rails 5和更高版本: 在routes.rb中

  match "/404", :to => "errors#not_found", via:  :all
  match "/500", :to => "errors#internal_server_error", via: :all

对于控制器:

class ErrorsController < ApplicationController
  layout 'xyz'
  def not_found
  end

  def internal_server_error
  end
end

这将在生产环境中起作用,如果您也希望在开发中也这样做,则可以在development.rb中使用 更改:

  config.consider_all_requests_local = false