gpt4 book ai didi

ruby-on-rails - 为什么 find_by 范围在结果为 nil 时返回一个数组

转载 作者:行者123 更新时间:2023-12-04 05:39:01 27 4
gpt4 key购买 nike

我的模型中有一个范围:

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

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

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

谁能解释一下为什么?

最佳答案

这在 docs 中有说明:

... If it returns nil or false, an all scope is returned instead.

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

如果你真的需要它返回 nil,那么让你的作用域成为一个类方法。这将保留原始返回值。

关于ruby-on-rails - 为什么 find_by 范围在结果为 nil 时返回一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817790/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com