2014-07-08 1 views
11

Durante l'esecuzione di percorsi rake che vedo:come impostare e utilizzare un Rails percorsi prefisso

Prefix Verb URI Pattern          Controller#Action 
articles GET /articles(.:format)        articles#index 
new_article GET /articles/new(.:format)       articles#new 

insieme ad alcuni altri che ho lasciato fuori.

Questo è perché il mio file routes.rb ha:

resources :articles 

La mia domanda è che cosa è esattamente questo prefisso, e come vorrei cambiarlo?

Dal mio punto di vista è una scorciatoia per l'URI, quindi nella mia app potrei semplicemente riferirmi a new_article invece di articoli/nuovo? Mi riferisco davvero a @new_article o c'è qualche altro formato per farvi riferimento.

Seconda domanda, come posso modificarlo? Diciamo che voglio un prefisso chiamato new_document invece di new_article per la richiesta get su quell'URL. Cosa inserirò nel mio file routes.rb?

I looked at this link from the rails guides but all it seems to show is how to make the url longer by adding a prefix in front of it.

risposta

13

Percorsi

non sono sicuro perché si chiama prefix - dovrebbe essere chiamato path helper:

enter image description here

La linea di fondo è quando si chiama aiutanti come link_to o form_tag ecc - Richiederanno paths per popolare diverse azioni nella struttura di routing della tua app.

come rotaie favorisce convention over configuration & DRY programming, significa che se è possibile fare riferimento questi path helpers rispetto all'utilizzo di standard di urls, che vi permetterà di fare un riferimento & caso il percorso come richiesto

EG

Calling articles_path è lontano più potente del riferimento /articles ogni volta


Itinerari

Per rispondere alla tua domanda correttamente, è necessario apprezzare Rails usa resourceful routing - in pratica significa che ogni route aiutante si crea dovrebbe definire intorno a qualsiasi risorsa nell'applicazione

causa la struttura MVC di Rails, queste risorse verranno in genere definite dal controllers utilizzato:

#config/routes.rb 
resources :articles #-> articles_path etc 

Per rispondere alla tua domanda, è necessario apprezzare che si dovrebbe sempre fare riferimento alle risorse come sono (nel tuo caso articles).

Per personalizzare l'aiutante percorso, è necessario cambiamento il riferimento nel file di rotte, in questo modo:

#config/routes.rb 
resources :articles, as: :document, path: "document" #-> domain.com/documents 

Questo consente di definire percorsi personalizzati/aiutanti di percorso, che consente di chiamare quelli che desideri

11

E ti permette di utilizzare le scorciatoie, come new_article_path o new_article_url nel vostro controller e punti di vista. Questi sono molto utili quando si fanno cose come reindirizzare gli utenti a una pagina specifica o generare collegamenti dinamici.

È possibile modificare il prefisso aggiungendo l'opzione as: nel file routes.rb. Per esempio:

GET '/new', to: 'articles#new', as: 'my_new_article` 

Questo cambierebbe il prefisso per my_new_article.

1

Il prefisso può essere utilizzato con gli helper del percorso per generare percorsi nell'applicazione. Quindi, nella tua applicazione, l'helper articles_path genera un percorso per la pagina di indice degli articoli, new_article_path è il percorso per la nuova pagina dell'articolo e article_path (@article) sarebbe il percorso per la pagina di presentazione per @article.

Per specificare un percorso diverso, è possibile modificare il file routes.rb a:

resources :articles, as: :documents 

che vi darà:

documents GET /articles(.:format)        articles#index 
new_document GET /articles/new(.:format)       articles#new 

potrei pensare di cambiare il nome della risorsa di documenti come esso può diventare confuso quando si rinomina rotte e si ottiene un mix di terminologia tra il percorso e il controller.

1

Si può fare qualcosa di simile:

resources :articles do 
collection do 
     get "new" => "articles#new", :as => 'new_document' 
end 
end 

e lo si può utilizzare:

link_to "New foo", new_document_path 

o

link_to "New foo", new_document_url 

url stampa l'URL assoluto (http://server.com/controller/action) Nel frattempo stampe percorso l'url relativo (/controller/action).

6

Hai ragione, il prefisso viene utilizzato nella creazione delle rotte denominate, pertanto lo resources method nel file di percorsi crea percorsi come articles_path, new_article_path ecc.Per fare riferimento a un percorso nel tuo codice, aggiungi path al prefisso che vedi quando running rake routes.

Se si desidera modificare i prefissi generati dal metodo di risorse nel file percorsi, utilizzare il :as option, in questo modo:

resources :articles, as: :posts

Questo genererà percorsi come 'new_post_path' che puoi usare nelle tue visualizzazioni.

Se si desidera modificare il percorso della rotta nel browser, è possibile utilizzare l'opzione path:

resources :articles, path: :posts 

che genererà percorsi come /posts/1 or /posts/new invece di /articles/1 or /articles/new, ma i percorsi saranno ancora chiamato articles_path, new_article_path ecc. nel tuo codice. È possibile utilizzare entrambe le opzioni :path and :as per modificare sia lo path and the prefix dei percorsi delle risorse.

Per modificare un percorso di base nel file percorsi, si può semplicemente utilizzare :as, in questo modo:

get 'messages' => 'messages#index', as: :inbox

questo creerà l'inbox_path percorso che è possibile utilizzare nel codice.

Spero che questo aiuti!