1

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

我想将用户代理检查从部分移到更清洁、更易于阅读的东西中。我尝试将条件移动到名为 is_this_ie7 的方法?在助手和控制器中,两者都给了我一个未定义的方法中断。

如果我是一个更有经验的 RoR 开发人员,这会去哪里?提前致谢!!!!

      <!-- 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 %>
4

3 回答 3

2

通常在帮助程序中,如果您想灵活处理 TDD,您可以为字符串和请求创建一个方法:

# ./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

一个更强大的答案是对其建模:

# ./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

 gem install browser
 ...
 browser.ie7? 
于 2012-10-01T02:40:09.393 回答
1

最好让浏览器嗅探客户端。但如果你真的必须在 Rails 模板中做,你可以做一个助手:

_social.html.erb

<% if ie7?(request) %>
  do ie7 stuff
<% else %>
  do other stuff
<% end %>

application_helper.rb

def ie7?(request)
  if request.user_agent
    !!request.user_agent.match(/msie 7.0/i)
  end
end
于 2012-10-01T02:39:30.867 回答
0

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

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

于 2012-10-01T02:38:36.560 回答