如果客户是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 %>
答案 0 :(得分: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?
答案 1 :(得分: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
答案 2 :(得分:0)
我认为这个代码在布局中应该没问题。您已经将大部分逻辑抽象为函数。在布局中使用它可以允许您从控制器渲染此布局。
这也可能位于视图文件中,但如果您需要在多个页面中使用,则必须为多个视图文件复制相同的代码。或者使用content_for