En exécutant les routes de rake, je vois:
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
new_article GET /articles/new(.:format) articles#new
avec quelques autres, j'ai laissé de côté.
C'est parce que mon fichier routes.rb a:
resources :articles
Ma question est ce qu'est exactement ce préfixe et comment pourrais-je le changer?
D'après ce que j'ai compris, il s'agit d'un raccourci vers l'URI. Par conséquent, dans mon application, je pourrais simplement me référer à new_article au lieu d'articles/new? Est-ce que je fais vraiment référence à @new_article ou existe-t-il un autre format pour le référencer?
Deuxième question, comment puis-je modifier cela? Disons que je veux un préfixe appelé new_document au lieu de new_article pour la requête get sur cette URL. Que mettrais-je dans mon fichier routes.rb?
Chemins
Je ne sais pas pourquoi cela s'appelle prefix
- ça devrait s'appeler path helper
:
En bout de ligne, vous appelez des assistants tels que link_to
ou form_tag
etc. - ils auront besoin de paths
pour renseigner différentes actions dans la structure de routage de votre application.
Comme Rails favorise convention over configuration
& DRY programming , cela signifie que si vous pouvez référencer ces path helpers
à l'aide de la variable urls
standard, vous pourrez créer une référence et modifier le parcours comme requis.
PAR EXEMPLE
Appeler articles_path
est loin plus puissant que référencer /articles
à chaque fois
Itinéraires
Pour répondre correctement à votre question, vous devez comprendre que Rails utilise resourceful
routing -, ce qui signifie que chaque assistant route
que vous créez devrait être défini autour de toute ressource de votre application.
En raison de la structure MVC de Rails, ces ressources seront généralement définies par la controllers
que vous utilisez:
#config/routes.rb
resources :articles #-> articles_path etc
Pour répondre à votre question, vous devez comprendre que vous devez toujours référencer vos ressources telles quelles (dans votre cas, articles
).
Pour personnaliser l'assistant de chemin, vous devez changer la référence dans le fichier de routes, comme ceci:
#config/routes.rb
resources :articles, as: :document, path: "document" #-> domain.com/documents
Cela vous permet de définir des aides personnalisées pour les itinéraires/chemins, vous permettant d’appeler ceux qui vous intéressent.
Il vous permet d’utiliser des raccourcis tels que new_article_path
ou new_article_url
dans vos contrôleurs et vos vues. Celles-ci sont très utiles lorsque vous redirigez des utilisateurs vers une page spécifique ou que vous générez des liens dynamiques.
Vous pouvez modifier le préfixe en ajoutant l'option as:
dans votre fichier routes.rb. Par exemple:
GET '/new', to: 'articles#new', as: 'my_new_article`
Cela changerait le préfixe en my_new_article
.
Vous avez raison, le préfixe est utilisé dans la construction des routes nommées. Le resources method
du fichier routes crée des routes telles que articles_path, new_article_path
, etc. Pour faire référence à une route dans votre code, ajoutez path
au préfixe affiché lorsque running rake routes
.
Si vous voulez changer les préfixes générés par la méthode resources dans votre fichier de routes, utilisez le:as option
, comme ceci:
resources :articles, as: :posts
Cela générera des itinéraires tels que 'new_post_path' que vous pourrez utiliser dans vos vues.
Si vous souhaitez modifier le chemin de la route dans le navigateur, vous pouvez utiliser l'option path
:
resources :articles, path: :posts
Ce qui générera des routes comme /posts/1 or /posts/new
au lieu de /articles/1 or /articles/new
, mais les routes seront toujours nommées articles_path, new_article_path
etc. dans votre code. Vous pouvez utiliser les deux options :path and :as
pour modifier le path and the prefix
de vos itinéraires de ressources.
Pour modifier une route de base dans votre fichier de routes, vous pouvez simplement utiliser :as
, comme suit:
get 'messages' => 'messages#index', as: :inbox
Cela créera la route inbox_path que vous pourrez utiliser dans votre code.
J'espère que cela pourra aider!
Vous pouvez également utiliser routes scopes for it. Dans votre fichier routes.rb
:
Rails.application.routes.draw do
# Any other routes here
scope 'admin' do
resources :articles
end
end
/admin/articles
et tous les autres itinéraires liés à CRUD fonctionneront avec link_to
, les contrôles d'envoi de formulaire, etc.
Le préfixe peut être utilisé avec les aides de route pour générer des routes dans votre application. Ainsi, dans votre application, l'assistant articles_path génère un itinéraire pour la page d'index d'articles, new_article_path est l'itinéraire pour la nouvelle page d'article et article_path (@article) serait l'itinéraire pour la page d'affichage de @article.
Pour spécifier un autre itinéraire, vous pouvez modifier votre fichier routes.rb en:
resources :articles, as: :documents
Cela vous donnera:
documents GET /articles(.:format) articles#index
new_document GET /articles/new(.:format) articles#new
Je pourrais envisager de changer le nom de la ressource en documents, car cela peut prêter à confusion lorsque vous renommez des itinéraires et obtenez un mélange de terminologie entre la route et le contrôleur.
Vous pouvez faire quelque chose comme ça:
resources :articles do
collection do
get "new" => "articles#new", :as => 'new_document'
end
end
et vous pouvez l'utiliser:
link_to "New foo", new_document_path
ou
link_to "New foo", new_document_url
url affiche l'url absolu ( http://server.com/controller/action ), tandis que chemin, affiche l'URL relative (/controller/action
).
Vous pouvez essayer dans le fichier config.ru
map 'YOUR_PREFIX_HERE' do
run Rails.application
end