2011-12-30 8 views
17

Ho un'app per rotaie (Rails 3.0) che devo temporaneamente mettere fuori servizio. Mentre questo è in effetti, voglio creare una nuova rotta che indirizzerà tutte le richieste a un singolo pezzo di contenuto statico. Ho un controller configurato per servire le mie pagine statiche.Come posso creare un percorso Rails 3 che soddisfi tutte le richieste e diretto a una risorsa/pagina?

Ho provato qualcosa di simile:

match '*' => 'content#holding' 

e

match '*/*' => 'content#holding' 

per abbinare un percorso jolly come descritto qui: Rails 3 route globbing senza successo.

Questa è probabilmente una risposta molto semplice, ma non riuscivo a capirlo.

/EDIT/ dimenticato di dire che ho avuto questa regola in cima del mio file routes.rb.

+0

Hai inserito questa rotta nella parte superiore del tuo file di rotte? – Robin

risposta

39

Rails ha la necessità di associare i parametri URL di una variabile, provate questo:

match '*foo' => 'content#holding' 

Se Voglio anche corrispondere a /, utilizzare le parentesi per specificare che foo è facoltativo:

match '(*foo)' => 'content#holding' 
+0

Questo sembra funzionare per tutti i percorsi, ma non per la radice stessa. Ho aggiunto anche una route root temporanea aggiuntiva all'inizio di routes.rb, quindi ora funziona come voglio - grazie! – Nick

+1

Il mio risultato finale assomiglia a questo: "match '* foo' => redirect ('/') #NEWLINE root: to => 'content # holding'" Fondamentalmente ho preso la tua idea, aggiunto il reindirizzamento, quindi instradato root temporaneamente a la mia pagina di partecipazione. – Nick

+1

vedi le mie modifiche per ottenere anche il root – klochner

0

mi sono imbattuto in qualcosa di simile a questo, dove ho avuto i nomi di dominio come parametro nel mio percorso:

match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails' 

Il pezzo chiave di questo è stato il /.*/ che è stato un jolly per praticamente qualsiasi cosa. Così forse si potrebbe fare qualcosa di simile:

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want' 
1

L'ho fatto solo ieri e il primo si avvicinò con la soluzione che KLOCHNER spettacoli. Ciò che non mi piace di questo è il fatto che qualsiasi cosa entri nell'URL, resta lì dopo che la pagina è stata caricata, e dal momento che volevo un catch su tutte le route che reindirizzano al mio root_url, non era molto allettante.

Quello che mi è venuta con un look come questo:

# in routes.rb 
get '*ignore_me' => 'site#unknown_url' 

# in SiteController 
def unknown_url 
    redirect_to root_url 
end 

Ricordarsi di attaccare l'entrata percorsi nella parte inferiore del file!

MODIFICA: Come già sottolineato da Nick, è anche possibile eseguire il reindirizzamento direttamente nel file di rotte.

+0

Sì, l'ho notato anche io. Puoi anche effettuare reindirizzamenti direttamente nel percorso.rb - guarda il mio commento in alto sulla risposta di klochner – Nick

+0

@Nick Ah, ora è bello. Passerà a quella soluzione. – cvshepherd

Problemi correlati