gpt4 book ai didi

ruby-on-rails - Rails has_many 与 finder_sql 和 name_scope 组合返回 nil

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

例如假设您有:

       class Model < AR::Base 
has_many :somethings, :finder_sql => "SELECT * FROM somethings"
end

class Something < AR::Base
named_scope :valuable {...code...}
end

# Assume you have one model but 0 somethings:
# Model.first.somethings # => [] Good!
# Model.first.somethings.valuable # => nil Bad! Should return [] !!!

只有在 has_many 关系中有 finder_sql 时才会发生这种情况。在其他情况下,它会按预期工作。

这是 Rails 2.3.14 的正常行为吗?

最佳答案

是的,如果您指定 finder_sql,那么您将无法附加作用域。那是因为 finder_sql 适用于不符合正常 activeRecord 范例的情况。话虽这么说,你构建这个的方式是不正确的。您不需要在这样的关系中存储没有过滤器的 select *。关系的目的是将过滤器应用于另一个模型。因此,您拥有它的方式 Model.find(params[:id]).somethings 与调用 Something.all 完全相同。在后一种情况下,范围将适用于您,因为 .all 可以确定范围。

关于ruby-on-rails - Rails has_many 与 finder_sql 和 name_scope 组合返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688280/

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