首页 > 解决方案 > 在 Rails 中用 NIL 覆盖路由参数?

问题描述

如果我的默认期望参数的方法不使用参数,有没有办法使用资源路由而不是一个一个地编写路由?

例如,如果我有一个如下所示的路由文件,该update方法的预期路径将是这样的/cats/:id:( docs )

# routes.rb
Rails.application.routes.draw do
  resources :cats, only: [:create, :update]
end

但是,我的方法不需要任何参数update,这意味着路径应该是/cats. 我知道有一种方法可以重命名参数而不是使用:id,但我没有找到任何禁用它们的方法。我尝试添加param: nil到行尾,但没有奏效。

正如我最初写的那样,我知道如果我像下面这样一一编写路线,就可以做到这一点。我的问题是我是否可以使用resources它来做到这一点。谢谢!

# routes.rb
Rails.application.routes.draw do
  post 'cats', to: 'cats#create'
  put 'cats', to: 'cats#update'
end

标签: ruby-on-railsrubyroutingroutes

解决方案


这正是单一资源的用例。引用Rails 指南

有时,您有一个资源,客户端总是在不引用 ID 的情况下查找该资源。例如,您希望/profile始终显示当前登录用户的个人资料。

将我们的路由更改为

resource :cats, only: [:create, :update]

并且将创建以下路线:

cats PATCH /cats(.:format)     cats#update
     PUT   /cats(.:format)     cats#update
     POST  /cats(.:format)     cats#create

推荐阅读