在一些Rails应用程序中,我在routes.rb
中看到了这一点root :to => "home#index", :via => [:get]
root :to => "accounts#manage", :via => [:options]
我无法理解这两个根URL是如何存在的。谷歌搜索也没有帮助清除:选项参数。有人可以帮忙吗?
由于
答案 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方法
允许 :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