ruby-on-rails - 在检查机器人的函数中使用中断时,Ruby 函数返回 true 而不是 false

标签 ruby-on-rails ruby ruby-on-rails-3 bots break

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

我想做的是允许机器人访问,即使它们没有 cookie。由于某种原因,这不起作用,因为我也需要它。我是 RoR 的新手,我很感激能提供的所有帮助。提前致谢。

我正在使用 chrome 进行测试,因此我将“Chrome”添加到 bots 数组并删除了我的 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

最佳答案

这个函数可以大大简化。尝试这样的事情:

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

Hereany? 函数的文档,它正是您在这里寻找的。最好使用这样的内置函数,这样与您自己重新实现此类函数相比,您的代码更清晰且更不容易出错。

关于ruby-on-rails - 在检查机器人的函数中使用中断时,Ruby 函数返回 true 而不是 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750741/

相关文章:

ruby - 优化 Ruby 中的嵌套循环

ruby-on-rails - 如果添加尾部斜杠,Rails 4 中的 URL 会中断吗?

ruby-on-rails - Ruby on Rails 似乎是由 link_to 创建的自动转义 html

ruby-on-rails - Rails 应用程序之间的通信

c++ - 在简单的映射函数中避免 IF

mysql - mysql2 (0.3.2) 版本不再附带捆绑的 ActiveRecord 适配器,因为它现在是 Rails 3.1 的一部分

ruby-on-rails - 从 postgresql 函数中选择 ActiveRecord 连接

ruby-on-rails - 为什么包含 Rescuable 模块不起作用?

ruby-on-rails-3 - 导轨 : ZIP file shown in browser instead of being downloaded

javascript - SpineJS url() 可以支持 Rails 中的嵌套资源吗?