gpt4 book ai didi

sql - Rails first_or_create 添加 (1=2) 到查询

转载 作者:行者123 更新时间:2023-11-29 11:48:22 26 4
gpt4 key购买 nike

在沙盒模式下通过 Heroku 控制台运行开发代码时,我使用 first_or_create 来测试记录是否存在:

Right.where(:language           => language          ).
where(:work_id => work_id ).
where(:contact_id => contact_id ).
first_or_create!

用于测试记录是否存在的查询会添加一个额外的谓词 (1=2),因此找不到记录。

SELECT "rights".* FROM "rights" WHERE "rights"."language" = 'ger' AND "rights"."work_id" = 625 AND "rights"."contact_id" = 1435 AND (1 = 2) LIMIT 1

谁能建议我如何追踪它的来源——也许是沙盒模式?

编辑:沙盒模式被调用:

heroku run console -s --app my-app-name

Running Rails console on heroku, in sandbox mode

最佳答案

OK,谜底揭晓。

first_or_create 是从一个方法调用的,该方法传递了一些属性的参数。像这样的东西:

def get_right(language,work_id,contact_id,terms)
right = Right.where(:language => language ).
where(:work_id => work_id ).
where(:terms => terms ).
where(:contact_id => contact_id ).
first_or_create!
right.id
end

调用方法时,terms 参数作为 {} 而不是 nil 传递。

显然,activerecord 处理这种愚蠢行为的方法是删除查询中违规列(术语)上的谓词,并改为附加一个 (1 = 2) 谓词。

我不能说我宁愿遇到错误 :(

关于sql - Rails first_or_create 添加 (1=2) 到查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com