

Rails extends routes searching to include dynamic URL params
source link: https://blog.saeloun.com/2022/09/06/extend-routes-grep-functionality
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Rails extends routes searching to include dynamic URL params
Sep 6, 2022 , by Swaathi Kakarla
1 minute read
As your Rails application grows, the routes file can get quite large.
Rails provides two ways to search for routes, http://localhost:3000/rails/info/routes
and rails routes
.
The web interface makes it easy to search for routes,
but most devs prefer the command line interface.
Using rails routes
shows all the routes in your application,
and rails routes -g cats
finds all the routes that match the string cats
.
However, it can be difficult to find the route one is looking for on the command line,
especially, if the route contains dynamic URL params.
For example,to search for the route that matches cats/10/toys/15
, one has to search for cats/:cat_id/toys/:id
instead.
This can be frustrating, especially if we’re not sure what the dynamic URL param is called.
Before
Let’s consider a routes file that looks like this,
resources :cats do
resources :toys
end
Now, if we search for rails routes -g cats/:cat_id/toys/:id
,
we get the following output,
Prefix Verb URI Pattern Controller#Action
cat_toy GET /cats/:cat_id/toys/:id(.:format) toys#show
PATCH /cats/:cat_id/toys/:id(.:format) toys#update
PUT /cats/:cat_id/toys/:id(.:format) toys#update
DELETE /cats/:cat_id/toys/:id(.:format) toys#destroy
However searching for rails routes -g cats/10/toys/15
returns no results.
After
Thanks to this PR,
Rails now supports searching for dynamic URL params in the rails routes
command, making it easier to find the route one is looking for.
Now if we search for rails routes -g cats/10/toys/15
, we get the following output,
Prefix Verb URI Pattern Controller#Action
cat_toy GET /cats/:cat_id/toys/:id(.:format) toys#show
PATCH /cats/:cat_id/toys/:id(.:format) toys#update
PUT /cats/:cat_id/toys/:id(.:format) toys#update
DELETE /cats/:cat_id/toys/:id(.:format) toys#destroy
Notice that the options index
and create
are not shown in the output.
This is because the rails routes
command only shows the routes that match the string cats/10/toys/15
exactly,
no fuzzy matching is allowed.
To search for the index
and create
routes, we can search for rails routes -g cats/10/toys
.
Prefix Verb URI Pattern Controller#Action
cat_toys GET /cats/:cat_id/toys(.:format) toys#index
POST /cats/:cat_id/toys(.:format) toys#create
Funny enough, searching for rails routes -g cats/10/toys/new
only does a regex match
and does not show only the new
route.
Maybe this is something that can be improved in the future.
Prefix Verb URI Pattern Controller#Action
new_cat_toy GET /cats/:cat_id/toys/new(.:format) toys#new
cat_toy GET /cats/:cat_id/toys/:id(.:format) toys#show
PATCH /cats/:cat_id/toys/:id(.:format) toys#update
PUT /cats/:cat_id/toys/:id(.:format) toys#update
DELETE /cats/:cat_id/toys/:id(.:format) toys#destroy
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK