【问题标题】:Rails adds `AND (1=0)` to queriesRails 向查询添加“AND (1=0)”
【发布时间】:2013-11-11 00:35:33
【问题描述】:

Rails 以某种方式将AND (1=0) 添加到模型的 SQL 查询中:

CompanyRelation Load (0.2ms)  SELECT `company_relations`.* FROM `company_relations` WHERE `company_relations`.`vendor_id` = 1 AND (1=0)

【问题讨论】:

  • 您要么使用范围(默认或其他),要么有一些奇怪的插件正在这样做。你能展示为你的查询构建逻辑的代码吗?
  • 我已将模型的代码添加到问题中.. 非常简单.. 我使用 Squeel,删除它并不能解决任何问题..
  • 会不会是CanCan?我用它来自动加载我的资源..?
  • 你还没有发布什么触发了有问题的查询,更不用说那个触发对象是如何构建的......
  • 我猜我找到了:github.com/ryanb/cancan/issues/733

标签: mysql ruby-on-rails ruby-on-rails-4


【解决方案1】:

如果您执行 where(params[:data]),您还可以在查询中找到 1=1 或 1=0 和 data 它是一个空值的散列。例如你有 params hash live

{ village: { directions: { id: Empty Array }}}

【讨论】:

    【解决方案2】:

    似乎是 CanCan 的问题:

    http://github.com/ryanb/cancan/issues/733

    【讨论】:

      【解决方案3】:

      这是我发现的第一个包含“rails scope 'AND 1=0'”的问题。 正如 rossmari 所提到的,可能有一个空的哈希值。您可能无意中将范围应用于用于生成哈希的条件。此范围可能会给您留下一个空的哈希值。例如

      Assessment.last.children.for_user(user)
      

      将在您可能不期望的 for_user 范围内应用子范围。在下面的示例中,id 的哈希值通过 id 参数传递。

      如果你有类似的东西

      scope :for_user, lambda { |user|
          where(id: Question.where(assigned_to: user).... #a hash
      

      然后尝试添加无范围

      scope :for_user, lambda { |user|
          where(id: Question.unscoped.where(assigned_to: user).... #a hash
      

      编辑:我发现当我认为我需要无作用域时,很有可能我的查询结构不正确。

      【讨论】:

        猜你喜欢
        • 2014-11-07
        • 2013-06-01
        • 1970-01-01
        • 2014-03-20
        • 2017-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多