named_scope - 查找字段既不为null也不为空/空白的条目

时间:2010-07-01 14:06:38

标签: ruby-on-rails named-scope

我只想找到非空或空/空白的记录,目前我有;

named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]

(gallery是一个字符串)但是如果用户输入然后删除标题,那么这个空字符串将包含在结果中。

澄清我希望能够只选择字段中包含某些文本的条目...

3 个答案:

答案 0 :(得分:3)

怎么样?
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL AND gallery != ''"]

答案 1 :(得分:2)

我认为J的命名范围定义看起来是正确的,但除此之外,我会问为什么你使用NULL和空字符串来表示“不在图库中”。如果你可以控制这个数据库的所有插入和更新,我建议选择一个或另一个(NULL似乎对我来说更自然)并坚持下去。它会在诸如此命名范围之类的地方简化您的代码,如果您忘记检查其中一个,允许两者都会导致一些非常烦人的错误。

实现此功能的一种简单方法是添加验证以禁止将库设置为空字符串,然后修复任何中断(希望您有测试)。如果您正在公开API并且需要允许空库来向后兼容,则可以设置before_save挂钩以将空字符串更改为nil。

答案 2 :(得分:0)

以下内容涵盖非空和非空:

named_scope :in_gallery, :conditions => ["gallery <> ''"]

或者在rails 3+中你可以这样做:

scope :in_gallery, where("gallery <> ''")