reesaspieces
reesaspieces

Reputation: 1810

Overriding routes parameters with NIL in Rails?

Is there a way to use resource routing instead of writing the routes one by one if my methods for which the default expects parameters don't use parameters?

For example, if I had a routes file like below, the expected path for the update method would be like this: /cats/:id (docs)

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

However, I don't require any params for my update method, meaning the path should be /cats. I know there's a way to rename the params and not use :id, but I didn't find anything on disabling them. I tried adding param: nil to the end of the line but it didn't work.

As I wrote initially, I know this can be done if I write the routes one by one like below. My question is whether I can use resources to do it. Thank you!

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

Upvotes: 0

Views: 627

Answers (2)

spickermann
spickermann

Reputation: 106972

This is exactly the use case for singular resources. Quote from the Rails Guides:

Sometimes, you have a resource that clients always look up without referencing an ID. For example, you would like /profile to always show the profile of the currently logged in user.

Change our routing to

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

And the following routes will be created:

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

Upvotes: 3

AMHOL
AMHOL

Reputation: 144

As far as I know, there is not, resource is just a helper to create the standard verb-based CRUD routes, if you want custom routes you need to define your update route the way you did in your second example, of course, you can still use resource for your create route and just pass only: :create.

Upvotes: 0

Related Questions