2015-07-30 12 views
8

Sto creando un pannello di amministrazione personalizzato in uno spazio dei nomi "admin".Come avere una risorsa in route per namespace e root path del tutto - Rails 4

Sono presenti "corsi" di risorse all'interno di tale spazio dei nomi.

ma vorrei anche un percorso di "corsi" che non è in quel namespace:

esempio: SIA localhost:3000/admin/courses E localhost:3000/courses

Va bene se questo richiede diversi controller.

La mia preoccupazione è che non è molto ASCIUTTO se ho entrambe le risorse per lo stesso percorso.

namespace admin do 
    resources :courses 
end 

e proprio

resources :courses 

C'è un modo per avere una risorsa essere condiviso tra namespace e senza namespace, o è l'esempio sopra la strada da percorrere?

+0

Dopo un chiarimento, questo potrebbe essere un duplicato di http://stackoverflow.com/questions/20492370/rails-devise-same- resource-different-controller-based-on-user-type – jkeuhlen

+0

Stai dicendo che entrambi i percorsi dovrebbero andare alle stesse pagine? O l'azione è diversa per l'amministratore? – Daiku

+0

pagine diverse, controller diversi, forse stesse azioni, e volevo gli stessi percorsi se possibile con la stessa linea di codice. la gente qui sotto mi ha risposto :) –

risposta

4

Oh aspetta! C'è anche la possibilità di utilizzare concerns!

concern :shared_actions do 
    resources :courses 
    resources :something_else 
end 


namespace :admin do 
    concerns :shared_actions 
end 
concerns :shared_actions # Will add it to the root namespace ^^ 

EDIT: a quanto pare questo è ciò che this guy cercato anche di fare: D

+0

fammi provare e seguici su di esso. –

+0

erm qualcosa con la sintassi sembra sbagliato, ricevendo questo errore, e nel mio file di percorsi ho solo quello che mi hai dato sopra, errore di sintassi, inattesa tSYMBEG, in attesa di keyword_do o '{' o '(' namespace: admin, preoccupazioni: shared_actions –

+0

Era un colon mancante ^^ " –

3

Io non sono davvero sicuro di aver capito quello che vuoi dire, ma

namespace :something è in realtà una scorciatoia per scope :something, module: :something, as: :something

  • scope :something aggiungerà /something/ come prefisso URL
  • scope module: :something aggiungerà /something come un prefisso del controller (i controller verranno recuperati con controlelrs/something/the_controller.rb
  • scope as: :something d la something come prefisso per il percorso Helpers

Ora è totalmente bene avere sia nei vostri percorsi

resources :courses 
# Will generate "/courses/", "/courses/new", "/courses/1/edit", ... 
# And will point to `controllers/courses_controller.rb` 

namespace :admin do 
    resources :courses 
end 
# Will generate "/admin/courses/", "/admin/courses/new", "/admin/courses/1/edit", ... 
# And will point to `controllers/admin/courses_controller.rb` 

Questo è stato esauriente?

+0

Sono d'accordo che è bene avere entrambi i percorsi, ma non è più semplice specificare l'ambito e il modulo? Che è esattamente come la guida dei binari suggerisce di farlo (almeno per quanto mi riguarda). – jkeuhlen

+0

come ho detto jkeuhlen, penso che tu abbia frainteso quello che voglio fare, voglio avere un controller admin separato per admin/courses/path e un altro controller per il percorso/i percorsi front-end. con la sintassi che voi ragazzi mi date tutto ciò che fa è il punto di controllo di admin/corsi che non voglio voglio. Ho appena chiesto se c'è una sintassi speciale in routes.rb che può darmi percorsi per corsi/percorso e admin/corsi/percorso con una riga di codice invece di scrivere risorse due volte. capisci ora? È possibile? –

+0

Credo che dipenda dal tuo gusto personale. Personalmente, quando leggo 'namespace: admin' ha più senso per me che leggere semplicemente' scope: admin, module:: admin, come:: asmin' –