Rails为查询添加了“AND(1 = 0)”

时间:2013-11-11 00:35:33

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

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

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

3 个答案:

答案 0 :(得分:1)

你也可以在查询中找到1 = 1或1 = 0(params [:data]) 和数据它是一个空值的哈希。例如,你有params hash live

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

答案 1 :(得分:0)

似乎是CanCan的一个问题:

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

答案 2 :(得分:0)

这是我发现的第一个问题,其中包括“ 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

编辑:我发现当我认为自己需要不受限制时,很有可能我的查询结构不正确。