1

我有一个应该返回布尔值的函数。在函数内部,我正在检查用户是否被 cookie。如果用户没有被 cookie 比我想运行检查,看看他们是否是一个机器人。我有一个名为@bots 的数组,其中包含“googlebot”和“msnbot”等字符串。@bots 数组是使用 before_filter 创建的并且可用。

我想要做的是允许机器人访问,即使它们没有被 cookie。由于某种原因,这不起作用,因为我也需要它。我对 RoR 相当陌生,我很感激可以提供的任何和所有帮助。提前致谢。

我正在使用 chrome 进行测试,所以我在 bots 数组中添加了“Chrome”并删除了我的 cookie,但该函数仍然返回 false。我确信我忽略了一些东西。

def verified?
  if cookies[:verified].nil? 
    @bots.each do |bot| 
      if request.env['HTTP_USER_AGENT'].include? bot
        true
        break
      else
        false
      end
    end
  else
    true
  end 
end
4

1 回答 1

3

这个功能可以大大简化。尝试这样的事情:

def verified?
  cookies[:verified].present? or @bots.any? do |bot|
    request.env['HTTP_USER_AGENT'].include? bot
  end
end

是该any?函数的文档,它正是您在此处寻找的。最好使用这样的内置函数,这样你的代码比你自己重新实现这些函数时更清晰,更不容易出错。

于 2013-04-01T20:02:30.380 回答