红宝石 – 轨道 – 条件为零的条件

我发现使用符号的位置:my_id =>没有使用老学校吗?是不同的.有人可以解释一下为什么吗
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应用程序中,request参数为nil.
现有编码是MyTable.where(:my_id => params [:id])
在表中,有很多有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

两种语法都是完美的.这取决于你自己的喜好.但是,如果它是一个参数,并且您不知道是否为零,则最好使用:

MyTable.where(:my_id => parameter).first

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...