Come personalizzare Itinerari RESTful in Rails (basi)
-
21-09-2019 - |
Domanda
Ho letto attraverso la documentazione rotaie per Routing , Risorse riposante , ed il UrlHelper , e ancora non capisco le best practice per la creazione di percorsi complessi / nidificato. L'esempio su cui sto lavorando ora è per gli eventi, che has_many RSVP. Così un utente sta guardando attraverso un elenco di eventi, e registrare i clic, e passa attraverso un processo di registrazione, ecc voglio gli URL per assomigliare a questo:
/events
/events/123 # possible without title, like SO
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
/events/123/my-event-title/registration/new
... and all the restful nested resouces.
La domanda è, come faccio a realizzare questo con la quantità minima di codice?
Ecco quello che ho attualmente:
map.resources :events do |event|
event.resources :rsvps, :as => "registration"
end
Questo mi ottiene questo:
/events/123/registration
Qual è il modo migliore per realizzare gli altri 2 vie?
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
Dove my-category
è solo un array di 10 tipi possibili l'evento può essere.
Ho modificato Event#to_param
di tornare "#{self.id.to_s}-#{self.title.parameterize}"
, ma preferirei avere /id/title
con tutta la canonica-ness
Soluzione
Perché gli URL SEO-friendly che descrivi non sono conformi al modo in cui le rotaie genera percorsi RESTful, è necessario utilizzare percorsi regolari per impostare questi in su. Ad esempio:
map.show_event 'events/:id/:event_title', :controller => 'events', :action => 'show'
Non si sentono che è necessario utilizzare i percorsi RESTful generate automaticamente per assolutamente tutto nella vostra applicazione. Non è sempre una buona misura per quello che stai cercando di fare. Anche le rotaie di routing guida dice così:
Mentre il routing RESTful è diventato il Guide standard, ci sono ancora un sacco dei luoghi in cui il regolare più semplice di routing funziona bene. Si può anche mescolare i due stili all'interno di una singola applicazione. In generale, si dovrebbe preferire il routing RESTful, quando possibile, perché renderà le parti del vostro applicazione più facile da scrivere. Ma non c'è bisogno di cercare di calzascarpe ogni ultimo pezzo della tua applicazione in un quadro RESTful se questo non è una buona misura.
Altri suggerimenti
Avete guardato il Rails instradamento guida ? E 'ottenuto un sacco di informazioni per farti capire il router e include una sezione sulla risorse annidati .