title: Rails Browser Detection Methods
body: <p>Hey Everyone, I was wondering what methods are standard within the industry to do browser detection in Rails? Is there a gem, library or sample code somewhere that can help determine the browser and apply a class or id to the body element of the (X)HTML? Thanks, I'm just wondering what everyone uses and whether there is accepted method of doing this?</p>
  
  <p>I know that we can get the user.agent and parse that string, but I'm not sure if that is that is an acceptable way to do browser detection.</p>
  
  <p>Also, I'm not trying to debate feature detection here, I've read multiple answers for that on StackOverflow, all I'm asking for is what you guys have done. </p>
  
  <p>[UPDATE]</p>
  
  <p>So thanks to <a href="https://github.com/traction/browser_detect/blob/4520d4d935a2cefdfc6e1b31fe08f67e351d5a60/lib/browser_detect.rb">faunzy</a> on GitHub, I've sort of understand a bit about checking the user agent in Rails, but still not sure if this is the best way to go about it in Rails 3. But here is what I've gotten so far:</p>
  
  <pre><code>def users_browser
  user_agent =  request.env['HTTP_USER_AGENT'].downcase 
  @users_browser ||= begin
    if user_agent.index('msie') &amp;&amp; !user_agent.index('opera') &amp;&amp; !user_agent.index('webtv')
                  'ie'+user_agent[user_agent.index('msie')+5].chr
      elsif user_agent.index('gecko/')
          'gecko'
      elsif user_agent.index('opera')
          'opera'
      elsif user_agent.index('konqueror')
          'konqueror'
      elsif user_agent.index('ipod')
          'ipod'
      elsif user_agent.index('ipad')
          'ipad'
      elsif user_agent.index('iphone')
          'iphone'
      elsif user_agent.index('chrome/')
          'chrome'
      elsif user_agent.index('applewebkit/')
          'safari'
      elsif user_agent.index('googlebot/')
          'googlebot'
      elsif user_agent.index('msnbot')
          'msnbot'
      elsif user_agent.index('yahoo! slurp')
          'yahoobot'
      #Everything thinks it's mozilla, so this goes last
      elsif user_agent.index('mozilla/')
          'gecko'
      else
          'unknown'
      end
      end
  
      return @users_browser
  end
  </code></pre>