how to set up and use a Rails routes prefix
You can also use route scopes for it. In your routes.rb
file:
Rails.application.routes.draw do
# Any other routes here
scope 'admin' do
resources :articles
end
end
/admin/articles
and all the other CRUD related routes will work with link_to
, form submit controls, etc.
Paths
I'm not sure why it's called prefix
- it should be called path helper
:
The bottom line is when you call helpers like link_to
or form_tag
etc - they will require paths
to populate different actions in your app's routing structure.
As Rails favours convention over configuration
& DRY programming, meaning if you can reference these path helpers
over using standard urls
, it will allow you to make one reference & chance the route as required
EG
Calling articles_path
is far more powerful than referencing /articles
every time
Routes
To answer your question properly, you will need to appreciate Rails uses resourceful
routing - basically meaning that every route
helper you create should be defined around any resource in your application
Due to the MVC structure of Rails, these resources will typically be defined by the controllers
you use:
#config/routes.rb
resources :articles #-> articles_path etc
You should always reference your resources as they are (in your case articles
).
To customize the path helper, you'll need to change the reference in the routes file, like this:
#config/routes.rb
resources :articles, as: :document, path: "document" #-> domain.com/documents
This allows you to define custom routes / path helpers, allowing you to call those as you wish
It let's you use shortcuts such as new_article_path
or new_article_url
in your controllers and views. These come in very handy when doing things like redirecting users to a specific page or generating dynamic links.
You can change the prefix by adding the as:
option in your routes.rb file. For example:
GET '/new', to: 'articles#new', as: 'my_new_article`
This would change the prefix to my_new_article
.