gpt4 book ai didi

ruby-on-rails - Rails where 条件为零值

转载 作者:行者123 更新时间:2023-12-03 10:44:56 25 4
gpt4 key购买 nike

我发现使用 where 和符号 :my_id => nil 并使用老式的?是不同的。谁能解释我为什么?

MyTable.where("my_id = ? ", nil).first
SELECT `my_tables`.* FROM `my_tables` WHERE (my_id = NULL ) LIMIT 1

没有得到任何数据
MyTable.where(:my_id => nil).first
SELECT `my_tables`.* FROM `my_tables` WHERE (`my_tables`.`my_id` IS NULL) LIMIT 1

获取 my_id 为空的数据。

在 Rails 中使用的最佳实践是什么?

我想我没有说清楚我的问题。
在我的 rails 应用程序中,请求参数为零。
现有编码是 MyTable.where(:my_id => params[:id]).first
在表中,有很多记录的 my_id 为空。
因此,表中的第一条记录被无意识地拾取。
首先,是的,这是表中数据不干净的问题。

为了解决这个问题。
我找到两个解决方案

解决方案1
if params[:id].present?
MyTable.where(:my_id => params[:id]).first
end

解决方案2
MyTable.where("my_id = ? ", nil).first

如您所知,如果我们放入(如果条件越来越多),我们的应用程序会变慢,并且不会是函数式编程。
当我尝试解决方案 2 时,我感到很惊讶,因为我期望它应该给出相同的结果。

最佳答案

正确的 SQL 语法是 my_id IS NULL ,因此如果您将第一个代码段更改为以下内容,它将起作用:

MyTable.where("my_id IS ?", nil).first

两种语法都很好。这取决于你自己的喜好。但是,如果它是一个参数并且您不知道它是否会是 nil与否,你最好使用:
MyTable.where(:my_id => parameter).first

关于ruby-on-rails - Rails where 条件为零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6678723/

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