例如,假设您有:
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/