我只想找到不为空或空/空白的记录,目前我有;
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 <> ''")