轨道增加了`AND(1 = 0)`到查询(Rails adds `AND (1=0)` to que

2019-10-18 23:00发布

轨以某种方式增加了AND (1=0)到一个模型的SQL查询:

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

Answer 1:

你还可以找到1 = 1或1 = 0在你的查询,如果你在哪里(PARAMS [:数据])和数据是空值的哈希值。 例如,你有PARAMS散活

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


Answer 2:

似乎是惨惨的问题:

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



Answer 3:

这是我发现了包含“轨道范围‘和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

编辑:我发现,当我想我需要无范围,有一个很好的机会,我已经结构化的错误我的查询。



文章来源: Rails adds `AND (1=0)` to queries