在我正在进行的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'
或者我应该采用不同的方法吗?
感谢。
答案 0 :(得分:0)
您可以使用约束。 Rails路由约束要么是响应匹配的类?或者是一个lambda。
当约束应用于路线时,只有在约束评估为真时才会考虑路线。
考虑这个课程
class MobileContraint
def matches? request
request.user_agent =~ /Mobile|webOS/
end
end
您现在可以在以下路线中使用此课程:
resources :sessions
resources :sessions, :controller=> 'mobile/sessions', :constraints => MobileConstraint.new