【发布时间】:2021-01-28 21:55:37
【问题描述】:
我发现使用 where 和符号 :my_id => nil 并使用 old school one 和 ?是不同的。谁能解释一下为什么?
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 为 null 的数据。
在 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 时,我感到很惊讶,因为我希望它会给出相同的结果。
【问题讨论】:
-
对不起,你的问题对我来说没有任何意义了。你想要
my_id是nil的记录吗???您上面提到的两种解决方案做了两个完全不同的事情。我的回答和 leenasn 的回答解释了为什么你的“解决方案 2”不起作用。你想要什么? -
是的,你是对的。完全有两种不同的东西。我以为他们是一样的。解决方案 1 对我不起作用,因为参数可能为 nil,它会找到具有 NULL 值的记录。我想要的是如果参数为零,则什么也得不到。感谢您的回答。阅读所有答案后,这让我很清楚。谢谢各位
标签: ruby-on-rails null