我只想找到非空或空/空白的记录,目前我有;
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(gallery是一个字符串)但是如果用户输入然后删除标题,那么这个空字符串将包含在结果中。
澄清我希望能够只选择字段中包含某些文本的条目...
答案 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 <> ''")