web-dev-qa-db-fra.com

comment configurer et utiliser

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? 

J'ai regardé ce lien dans les guides Rails, mais tout ce qu'il semble montrer, c'est comment rendre l'URL plus longue en ajoutant un préfixe devant.

14
Frank Visaggio

Chemins

Je ne sais pas pourquoi cela s'appelle prefix - ça devrait s'appeler path helper:

enter image description here

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.

17
Richard Peck

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.

15
Ege Ersoz

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!

6
user3376757

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.

2

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.

1
mdenomy

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).

1
aarkerio

Vous pouvez essayer dans le fichier config.ru 

 map 'YOUR_PREFIX_HERE' do
   run Rails.application
 end
0
Amit Agarwal