【发布时间】:2010-07-01 14:06:37
【问题描述】:
我只想找到不为空或空/空白的记录,目前我有;
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(画廊是一个字符串)但是如果用户输入然后删除一个标题,那么这个空字符串将包含在结果中。
澄清一下,我希望能够仅选择该字段包含一些文本的条目...
【问题讨论】:
我只想找到不为空或空/空白的记录,目前我有;
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]
(画廊是一个字符串)但是如果用户输入然后删除一个标题,那么这个空字符串将包含在结果中。
澄清一下,我希望能够仅选择该字段包含一些文本的条目...
【问题讨论】:
怎么样
named_scope :in_gallery, :conditions => ["gallery IS NOT NULL AND gallery != ''"]
?
【讨论】:
我认为 J 的命名范围定义看起来不错,但除此之外,我会质疑为什么您同时使用 NULL 和空字符串来表示“不在画廊中”。如果您可以控制对该数据库的所有插入和更新,我建议您选择其中一个(NULL 对我来说似乎更自然)并坚持使用它。它会简化你的代码,例如,这个命名范围,如果你忘记检查一个或另一个,允许两者都可能会导致一些非常烦人的错误。
实现这一点的一种简单方法是添加验证以禁止将图库设置为空字符串,然后修复任何中断(希望您有测试)。如果您要公开 API 并且需要允许空库以实现向后兼容性,则可以设置 before_save 挂钩将空字符串更改为 nil。
【讨论】:
以下内容包括非空和非空:
named_scope :in_gallery, :conditions => ["gallery <> ''"]
或者在 rails 3+ 你可以这样做:
scope :in_gallery, where("gallery <> ''")
【讨论】: