What's the easiest way to detect the user's operating system in Rails 3?
Simple Rails app, mostly scaffolding. I want to detect whether the user is using Android or iPhone to ac开发者_开发知识库cess my app. What's the easiest way to do that?
if request.env['HTTP_USER_AGENT'].downcase.match(/android|iphone/)
puts "yup, its mobile"
end
I know this question is old, but in case this helps someone else, I use this method in application_controller.rb
to automatically set the format to :mobile
:
before_filter :detect_mobile
protected
def detect_mobile
request.format = :mobile if mobile?
end
def mobile?
request.user_agent =~ /iPhone|iPad|Android/i
end
The mobile?
method is separate so that you can also use it in your own controllers if you need to do some sort of conditional logic for mobile browsers.
def getBrowser(bt)
rs=false
ua=request.env['HTTP_USER_AGENT'].downcase
isOpera = ua.index('opera') ? true : false
isSafari = (ua =~ /webkit|khtml/) ? true : false
isSafari3 = (ua.index('webkit/5') ? true : false
isGecko = (!isSafari and ua.index('gecko')) ? true : false
isGecko3 = (!isSafari and ua.index('rv:1.9')) ? true : false
isIE = (!isOpera and ua.index('msie')) ? true : false
isIE7 = (!isOpera and ua.index('msie 7')) ? true : false
case bt
when 0 #isKonqueror
if ua.index('konqueror') then rs=true end
when 1 #isOpera
rs=isOpera
when 2 #isSafari
rs=isSafari
when 3 #isSafari2
rs=isSafari && !isSafari3
when 4 #isSafari3
rs=isSafari3
when 5 #isIE
rs=isIE
when 6 #isIE6
rs=isIE && !isIE7
when 7 #isIE7
rs=isIE7
when 8 #isGecko
rs=isGecko
when 9 #isGecko2
rs=isGecko && !isGecko3
when 10 #isGecko3
rs=isGecko3
when 11 #isWindows
if ua.index('windows') or ua.index('win32') then rs=true end
when 12 #isMac
if ua.index('macintosh') or ua.index('mac os x') then rs=true
end
when 13 #isAir
if ua.index('adobeair') then rs=true end
when 14 #isLinux
if ua.index('linux') then rs=true end
when 15 #isSecure
s = request.env['SERVER_PROTOCOL'].downcase
if s.index('https') then rs=true end
end
rs
end
http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/8fa57719fd9316e1
the user_agent gem is useful for mobile vs. desktop..., and browser version. but doesn't do anything for OS https://github.com/josh/useragent
精彩评论