我的模型中有一个范围:
scope :default_template, ->(template_type) { find_by(is_default: true, template_type: template_type) }
我正在使用,find_by
但问题是:当没有记录时,范围的结果是空白数组而不是nil
。
EmailTemplate.default_template('blahblah') # => []
有人可以解释为什么吗?
这是在文档中指出的:
...如果返回nil或false,则返回all范围。
为了使您的范围可组合,它应该返回ActiveRecord :: Relationship,如果没有记录满足给定的条件,则返回一个空的ActiveRecord :: Relationship。这样可以确保在对结果进行调用时,模型中的其他作用域调用不会引发NoMethodError nil
。
如果确实需要它返回nil,则将范围设为类方法。这将保留原始的返回值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句