2012-06-06 5 views
5

In einer Rails 3.2-Anwendung, die ich mache, möchte ich einige Ansichten (und Action-Handling) speziell für mobile Geräte erstellen. Also habe ich einen Namespace namens mobile erstellt.Rails 3.2 - Wie wird in einen Namespace umgeleitet?

namespace :mobile do 
    resources :sessions 
    resources :areas 
    end 

Zum Beispiel, wenn der Benutzer geht auf die Login-Seite mit einem mobilen ich den Controller und Ansichten, die ich machen für diesen Namespace verwenden möchten.

So, jetzt habe ich zwei verschiedene Möglichkeiten, um sich einzuloggen:

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

und

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

Aber wenn ein Anfragen kommt, wie könnte ich das „mobile“ Namespace auf die Anforderung hinzufügen, wenn es herkommt Handy, Mobiltelefon?

I.e. Ändern/Sitzungen/neu in/mobile/Sitzungen/neu

Ich verwende Rack :: MobileDetect, aber ich weiß nicht, wie Sie die redirect_to für diesen Zweck verwenden.

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

Oder sollte ich einen anderen Ansatz verwenden?

Danke.

+0

Versuchen Rake laufen: Routen und sehen, was Sie haben, ich denke, Sie brauchen mobile_sessions_path redirect_to oder etwas in dieser Richtung. Wenn Sie kein mobiles root haben, würde keine Route/mobile passen – CWitty

Antwort

0

Sie könnten eine Einschränkung dafür verwenden. Eine Rails-Routing-Einschränkung ist entweder eine Klasse, die auf Übereinstimmungen reagiert? oder ein Lambda.

Wenn eine Einschränkung auf eine Route angewendet wird, wird die Route nur berücksichtigt, wenn die Bedingung als wahr ausgewertet wird.

Betrachten Sie diese Klasse

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

Sie jetzt diese Klasse auf den Strecken wie diese verwenden:

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