5

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

  namespace :mobile do
    resources :sessions
    resources :areas
  end  

例如,如果用户使用手机进入登录页面,我想使用我为该命名空间创建的控制器和视图。

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

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

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

但是,当请求来自移动设备时,我如何将“移动”命名空间添加到请求中?

即改变 /sessions/new 成 /mobile/sessions/new

我正在使用 Rack::MobileDetect 但我不知道如何将 redirect_to 用于此目的。

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

还是我应该使用不同的方法?

谢谢。

4

1 回答 1

1

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

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

考虑这个类

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

您现在可以在这样的路线中使用此类:

resources :sessions
resources :sessions, :controller=> 'mobile/sessions', :constraints => MobileConstraint.new
于 2013-10-24T07:05:48.313 回答