Rails 3.2 - 如何重定向到命名空间?

Pod*_*Pod 5 mobile routing ruby-on-rails

在我正在做的Rails 3.2应用程序中,我想创建一些特定于移动设备的视图(和动作处理).所以我创建了一个名为mobile的命名空间.

  namespace :mobile do
    resources :sessions
    resources :areas
  end  
Run Code Online (Sandbox Code Playgroud)

例如,如果用户使用移动设备进入登录页面,我想使用控制器和我为该命名空间创建的视图.

所以现在我有两种不同的登录方式:

new_mobile_session GET    /mobile/sessions/new(.:format)      mobile/sessions#new
Run Code Online (Sandbox Code Playgroud)

new_session GET    /sessions/new(.:format)             sessions#new
Run Code Online (Sandbox Code Playgroud)

但是当请求到来时,如果它来自移动设备,我怎么能在请求中添加"移动"命名空间?

即将/ sessions/new更改为/ mobile/sessions/new

我正在使用Rack :: MobileDetect,但我不知道如何使用redirect_to来达到这个目的.

config.middleware.use Rack::MobileDetect, :redirect_to => '/mobile'
Run Code Online (Sandbox Code Playgroud)

或者我应该使用不同的方法?

谢谢.

Mar*_*eus 1

您可以为此使用约束。Rails 路由约束要么是响应匹配的类?或 lambda。

当约束应用于路线时,仅当约束评估为 true 时才会考虑该路线。

考虑这个类

class MobileContraint
  def matches? request
     request.user_agent =~ /Mobile|webOS/
  end
end
Run Code Online (Sandbox Code Playgroud)

您现在可以在路由中使用此类,如下所示:

resources :sessions
resources :sessions, :controller=> 'mobile/sessions', :constraints => MobileConstraint.new
Run Code Online (Sandbox Code Playgroud)