无法识别它是从桌面还是移动设备访问的

时间:2015-03-22 16:11:47

标签: ruby-on-rails ruby ruby-on-rails-4 mobile view

我正在尝试为移动设备创建视图。我找到了其他人的代码,这是ApplicationController

def check_for_mobile
  session[:mobile_override] = params[:mobile] if params[:mobile]
  prepare_for_mobile if mobile_device?
end
def prepare_for_mobile
  prepend_view_path Rails.root + 'app' + 'views_mobile'
end
def mobile_device?
  if session[:mobile_override]
    session[:mobile_override] == "1"
    session[:is_mobile] = nil
  else
    (request.user_agent =~ /(iPhone|iPod|Android|webOS|Mobile|iPad)/)
    session[:is_mobile] = true
  end
end
helper_method :mobile_device?

代码无法正确区分桌面和移动设备。当我运行此代码时,即使我在笔记本电脑上使用该应用程序,也会为移动设备生成视图。那是为什么?

我不理解方法check_for_mobile的定义。 params[:mobile]来自哪里?

2 个答案:

答案 0 :(得分:0)

在URL中设置了

params[:mobile]。可能的情况是网站的页眉/页脚中有一个链接,其中包含当前网址和?mobile=1。无论用户代理如何,上面的代码都会看到并切换到移动视图。

答案 1 :(得分:0)

Rails 4.1引入了一个新概念variants,它允许您为每种设备构建视图。

# The request variant is a specialization of the request format,
# like :tablet, :phone, or :desktop.
# Example from Rails upgrade Guide:

before_filter do
  request.variant = :tablet if request.user_agent =~ /iPad/
end

respond_to do |format|
  format.html do |html|
    html.tablet # renders app/views/projects/show.html+tablet.erb
    html.phone { extra_setup; render ... }
  end
end