Ruby on rails Rails在其中一个变量中的作用域为nil或blank

Ruby on rails Rails在其中一个变量中的作用域为nil或blank,ruby-on-rails,Ruby On Rails,如何创建一个作用域,以返回两列中值为nil或“”的记录 我想到的是: 范围:缺少坐标,->{where(“纬度=”或经度=”)} 但是,也许有一种更奇特的方法可以像Rails中的常规方式那样进行操作。一种有趣但更详细的方法(更长时不太像railsy,但使用链式作用域时更像railsy)是,您可以链式作用域,如果在Rails5上,则使用ActiveRecord或类似的方法: scope :bad_longitude, -> { where(longitude: '') #This will

如何创建一个作用域,以返回两列中值为nil或“”的记录

我想到的是:

范围:缺少坐标,->{where(“纬度=”或经度=”)}


但是,也许有一种更奇特的方法可以像Rails中的常规方式那样进行操作。

一种有趣但更详细的方法(更长时不太像railsy,但使用链式作用域时更像railsy)是,您可以链式作用域,如果在Rails5上,则使用ActiveRecord或类似的方法:

scope :bad_longitude, -> { where(longitude: '') #This will return all nil and blanks
scope :bad_latitude, -> { where(latitude: '' )

scope :missing_coordinates, -> {bad_longitude.or(bad_latitude) }

在这种情况下,我会按照您的方式进行,但如果您的范围变得更复杂,我会切换到链接范围,因为这样更易于维护

可以。是否通过比较''也考虑NILS?@ LeTiieSePion不,它将不会,你想要<代码>哪里(经度:[(’,NIL])< /C>或<代码>何处(“CuleSeCE(经度,'')= ''))< /C> >覆盖空值。我建议您更新您的模型,将
'
转换为
nil
(并修复数据库),这样您就只有一个“缺失值”。这很有意义,很好的提示。非常感谢。