2015-07-31 3 views
5

Recentemente ho avuto modo di conoscere i problemi delle guide nei percorsi da questa discussione How to have one resource in routes for namespace and root path altogether - Rails 4. Ora nella mia applicazione ho percorsi come questo:Il routing riguarda la definizione di parametri diversi per le risorse

namespace :admin do 
    resources :photos 
    resources :businesses 
    resources :projects 
    resources :quotes 
end 
resources :photos, param: 'slug' 
resources :businesses, param: 'slug' do 
    resources :projects, param: 'slug' #As I need both the url one inside business and one outside 
end 
resources :projects, param: 'slug' 
resources :quotes, param: 'slug' 

E ci sono molte altre risorse che si ripetono come avevo bisogno di loro. So di dubbi su come implementarli. Con le preoccupazioni che posso fare in questo modo:

concern :shared_resources do 
    resources :photos 
    resources :businesses 
    resources :projects 
    resources :quotes 
end 
namespace :admin do 
    concerns :shared_resources 
end 
concerns :shared_resources 

ma come posso dare diverso param di volta in volta le preoccupazioni? Ho provato a farlo in questo modo:

concerns :shared_resources, param: 'slug' 

Ma questo non porta cambiamenti nei percorsi. E se aggiungo:

resources :photos, param: 'slug' 

Quindi aggiungerà a entrambe le route slug invece di id. Ma dal punto di vista amministrativo ho bisogno di un ID e di fronte ho bisogno di una lumaca. Quindi ci sono delle opzioni per passare questo problema, in modo da ASCIUGARE il codice.

risposta

5

Sì, mi sono ricordato di aver visto qualcosa a riguardo. Non era nella guida di Rails, ma mi ha sorpreso lo an answer to a SO question. È possibile utilizzare un blocco: (citato dalla risposta summenzionata)

In Rails 4 è possibile passare le opzioni ai dubbi. Quindi, se si esegue questa operazione:

# routes.rb 
concern :commentable do |options| 
    resources :comments, options 
end 

resources :articles do 
    concerns :commentable, commentable_param: 'slug' 
end 

Poi, quando si rastrello percorsi, si vedrà che si ottiene un percorso come

POST /articles/:id/comments, {commentable_param: 'slug'} 
+0

Grazie per la risposta, ma purtroppo questo non ha funzionato Non ho trovato nessun cambiamento. Hai mai provato questo? Significa se questo ha funzionato per te – Deep

+0

Hmm Non ero sicuro di questo, ma nella domanda che ho collegato hanno usato parametri che assomigliavano a '$ {concern_name} _qualcosa '. Puoi provare con questa sintassi se funziona? Ad essere sinceri non ho provato da solo, ma visto i risultati positivi della risposta ho pensato che avrebbe funzionato ... –

+0

Ha funzionato qui! Grazie: D –

Problemi correlati