0

为了检测和响应移动用户代理,我正在使用

Mime::Type.register_alias "text/html", :mobile

我想知道用水豚进行测试的最佳方法是什么。本文建议使用以下方式设置 iphone 驱动程序 Capybara.register_driver :iphone do |app|

http://blog.plataformatec.com.br/2011/03/configuring-user-agents-with-capybara-selenium-webdriver/

但我想要一种更灵活的方法,通过 url 扩展名设置 mime 类型

localhost/index.mobile

我在哪里可以做到这一点

visit user_path( format: :mobile)

Rails 理解扩展名并formatparams散列中设置 ,但是我如何获取 url 辅助方法以将其作为文件扩展名添加到所有 url 中?

4

1 回答 1

1

我的答案是根据这个 Railscast 将格式保存在会话变量中: http ://railscasts.com/episodes/199-mobile-devices 。我选择使用 URL 扩展而不是查询字符串参数,因为它看起来更匹配。

这是我的代码application_controller.rb

def mobile_device?
  session.has_key?(:mobile) ? session[:mobile] : request.user_agent =~ /Mobile|webOS/
end
helper_method :mobile_device?

def prepare_for_mobile
  # avoid messing with .json, .xml
  if request.format == 'text/html'
    # only do this when an explicit extension is present
    case File.extname(URI.parse(request.fullpath).path)
    when '.html'
      session[:mobile] = false
    when '.mobile'
      session[:mobile] = true
    end
    # stop using a session param and go back to letting the user_agent decide
    when '.ua'
      session.delete(:mobile)
    end
    request.format = mobile_device? ? :mobile : :html
  end
end

这是mime_types.rb

Mime::Type.register_alias "text/html", :ua      # let the user agent decide
Mime::Type.register_alias "text/html", :mobile  # mobile
于 2012-09-05T21:43:43.087 回答