首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件的用户代理检查需要变得无意义

有条件的用户代理检查需要变得无意义
EN

Stack Overflow用户
提问于 2012-10-01 10:20:49
回答 3查看 908关注 0票数 1

我只是把这个条件写给了一个不同的社交领域,如果客户端在ie7 (Barf)上;因为我们的两个社交网络不再正确地支持ie7 (pinterest/google plus)。

我想把用户代理检查从部分转移到更干净、更具人类可读性的部分。我尝试将条件移动到名为is_this_ie7的方法中。在一个帮助器和一个控制器中,这两者都给了我一个未定义的方法中断。

如果我是一个更有经验的RoR开发人员,这将会发生什么?提前感谢!

代码语言:javascript
复制
      <!-- if ie7 load seperate helper  since gplus dones't support -->
    <%   if  request.env['HTTP_USER_AGENT'] =~ /msie 7.0/i %>
          <%= share_area_for_bidding_ie7   %>
    <%   else %>
        <!-- if any other browser load main share area -->
        <%= share_area_for_bidding  %>
    <%   end %>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-01 10:39:31

最好是让浏览器在客户端进行嗅探。但是如果你真的需要在Rails模板中做这件事,你可以做一个助手:

_social.html.erb

代码语言:javascript
复制
<% if ie7?(request) %>
  do ie7 stuff
<% else %>
  do other stuff
<% end %>

application_helper.rb

代码语言:javascript
复制
def ie7?(request)
  if request.user_agent
    !!request.user_agent.match(/msie 7.0/i)
  end
end
票数 1
EN

Stack Overflow用户

发布于 2012-10-01 10:40:09

通常在帮助器中,如果您希望TDD更灵活,您可以为字符串和请求创建一个方法:

代码语言:javascript
复制
# ./app/helpers/application_helper.rb

def agent_ie7?(agent)
  agent =~ /msie 7.0/i
end

def request_ie7? 
  agent_ie7?(request.env['HTTP_USER_AGENT'])
end

一个更强大的答案是模拟它:

代码语言:javascript
复制
# ./app/models/browser.rb

class Browser

  def initialize(agent)
    @agent = agent
  end

  def ie7?
    @agent =~ /msie 7.0/i
  end

end

一个很好的解决方案是使用现有的gem,它提供了您想要的:https://github.com/fnando/browser

代码语言:javascript
复制
 gem install browser
 ...
 browser.ie7? 
票数 2
EN

Stack Overflow用户

发布于 2012-10-01 10:38:37

我认为这段代码在布局中应该没问题。您已经将大部分逻辑抽象为函数。将其放在布局中可以让您从控制器渲染此布局。

这也可能在视图文件中,但如果您在多个页面中需要此代码,则必须为多个视图文件复制相同的代码。或者使用content_for将其插入到所需的页面中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12666845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档