为什么结果为nil时find_by范围返回一个数组

扎卡里亚

我的模型中有一个范围:

scope :default_template, ->(template_type) { find_by(is_default: true, template_type: template_type) }

我正在使用,find_by但问题是:当没有记录时,范围的结果是空白数组而不是nil

EmailTemplate.default_template('blahblah')  # => []

有人可以解释为什么吗?

Sebastian Palma的图片

这是在文档中指出的

...如果返回nil或false,则返回all范围。

为了使您的范围可组合,它应该返回ActiveRecord :: Relationship,如果没有记录满足给定的条件,则返回一个空的ActiveRecord :: Relationship。这样可以确保在对结果进行调用时,模型中的其他作用域调用不会引发NoMethodError nil

如果确实需要它返回nil,则将范围设为类方法。这将保留原始的返回值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么getElementsByTagName()总是返回一个数组?

Active Record Association CollectionProxy无法正常工作:当@ owner。@ target返回一个空数组时,为什么@ owner。@ target.count的结果为1?

为什么这个 Cypher 会为 `data` 键返回一个数组数组?

XPath 结果返回一个数组

为什么 document.getElementsByClassName 在这里返回一个数组?

为什么方法Message.getFrom()返回一个数组?

为什么`SmsMessage.createFromPdu`返回一个数组?

为什么console.log()显示一个数组,但是typeof返回'object'?

为什么从带有 querybuilder 的列中 select max 返回一个数组?

当只有一个数组时,文本文件计数返回为 2

当我将一个数组复制到另一个数组时,为什么两个数组都被修改?

(为什么)在for循环之前我应该测试一个数组是否为空?

为什么split会在第二个元素为空的情况下返回一个数组?

我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

为什么从lower_bound中减去一个数组会返回一个取消引用的值?

Groovy为每个匹配返回一个数组

为什么 mysqli_query 的结果返回一个对象,其字段设置为空?

在Haskell中使用范围时,为什么map返回一个附加元素?

为什么一个数字记录为 NaN?

为什么这不是一个数组?

为什么对象不会推入一个数组?

当包含多个文件,返回一个数组时,我将第一个包含的数组合并到第二个包含中,为什么?

将一个数组与另一个数组进行比较,然后返回匹配结果的索引

`detect` 和 `find` 返回 `nil` 而 `find_all` 和 `select` 返回一个结果

为什么mongoose.find返回一个空数组

为什么将一个空数组推入另一个数组?

在数组数组中搜索,并在一个数组中返回结果

为什么当我有多个结果时,此powershell代码仅返回一个结果?

为什么这个 javascript 函数为同一个查询返回两个不同的结果?