你如何在 Rails 中路由 [OPTIONS]?

Posted

技术标签:

【中文标题】你如何在 Rails 中路由 [OPTIONS]?【英文标题】:How do you route [OPTIONS] in Rails? 【发布时间】:2013-01-10 11:52:19 【问题描述】:

我正在 Rails 中创建 REST 服务。这是我的路线。

  resources :users
  match '/users', :controller => 'users', :action => 'options', :constraints => :method => 'OPTIONS'

我能够 [GET] 我的用户。我正在尝试更新我的用户,但出现错误:

ActionController::RoutingError (No route matches [OPTIONS] "/users/1"):

当我运行rake routes 时,这是给我的路线:

    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy
                 /users(.:format)          users#options :method=>"OPTIONS"

有人可以告诉我如何修复我的路线,以便我可以进行任何类型的 REST 调用吗?谢谢。

【问题讨论】:

【参考方案1】:
match '/users' => "users#options", via: :options

如果放置在其他路线之前,也可能是一条路线。

【讨论】:

【参考方案2】:

如果您不想为 /users/users/id 创建两个额外的路由,您可以这样做:

match 'users(/:id)' => 'users#options', via: [:options]

在这种情况下,id 变为可选,/users/users/id 将响应相同的路由。

【讨论】:

【参考方案3】:

我无法路由请求的原因是我的match 中没有用户ID。我添加了一行:

match '/users/:id', :controller => 'users', :action => 'options', :constraints => :method => 'OPTIONS'

现在我可以路由我所有的 GET 请求了。

【讨论】:

以上是关于你如何在 Rails 中路由 [OPTIONS]?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 路由如何匹配多个?

如何在 Rails 4 中覆盖控制器或动作的 X-Frame-Options

如何在 rails 4 中重新加载路由 /config/routes/*?

如何限制 Rails 路由文件中的资源格式

在rails mailer上调用deliver_later之前存储当前的可选路由范围

如何响应 rails-api 中的 OPTIONS HTTP 方法?