2012-06-06 20 views
5

In un'applicazione Rails 3.2 che sto facendo voglio creare alcune viste (e gestione delle azioni) specifiche per i dispositivi mobili. Quindi ho creato uno spazio dei nomi chiamato mobile.Rails 3.2 - Come reindirizzare a uno spazio dei nomi?

namespace :mobile do 
    resources :sessions 
    resources :areas 
    end 

Per esempio, se l'utente va alla pagina di login con un cellulare che voglio utilizzare il controller e viste faccio per questo spazio dei nomi.

Così ora ho due modi diversi di accesso:

new_mobile_session GET /mobile/sessions/new(.:format)  mobile/sessions#new 

e

new_session GET /sessions/new(.:format)    sessions#new 

Ma quando una richiesta arriva come potrei aggiungere lo spazio dei nomi "mobile" alla richiesta se viene da mobile?

I.e. modifica/sessioni/nuovo in/mobile/sessioni/nuovo

Sto utilizzando Rack :: MobileDetect ma non so come utilizzare il redirect_to a tale scopo.

config.middleware.use Rack::MobileDetect, :redirect_to => '/mobile' 

Oppure devo utilizzare un approccio diverso?

Grazie.

+0

provare a eseguire rastrello: percorsi e vedere quello che hai, io immagino è necessario redirect_to mobile_sessions_path o qualcosa del genere. Se non si dispone di una radice mobile, nessuna route corrisponde a/mobile – CWitty

risposta

0

È possibile utilizzare un vincolo per questo. Un vincolo di instradamento dei binari o è una classe che risponde alle corrispondenze? o un lambda.

Quando un vincolo viene applicato a un percorso, il percorso verrà considerato solo se il vincolo viene valutato su true.

Considerate questa classe

class MobileContraint 
    def matches? request 
    request.user_agent =~ /Mobile|webOS/ 
    end 
end 

È ora possibile utilizzare questa classe nei percorsi come questo:

resources :sessions 
resources :sessions, :controller=> 'mobile/sessions', :constraints => MobileConstraint.new 
Problemi correlati