我只是把这个条件写给了一个不同的社交领域,如果客户端在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 %>发布于 2012-10-01 10:39:31
最好是让浏览器在客户端进行嗅探。但是如果你真的需要在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-01 10:40:09
通常在帮助器中,如果您希望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-01 10:38:37
我认为这段代码在布局中应该没问题。您已经将大部分逻辑抽象为函数。将其放在布局中可以让您从控制器渲染此布局。
这也可能在视图文件中,但如果您在多个页面中需要此代码,则必须为多个视图文件复制相同的代码。或者使用content_for将其插入到所需的页面中
https://stackoverflow.com/questions/12666845
复制相似问题