例如,假设你有:
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的正常行为吗?
答案 0 :(得分:2)
是的,如果指定finder_sql,那么您将无法追加范围。这是因为finder_sql适用于不适合普通activeRecord范例的情况。话虽如此,你构建它的方式是不正确的。你不应该在这样的关系中存储没有过滤器的select *。关系的目的是将过滤器应用于其他模型。所以,你有它的方式Model.find(params [:id])。somethings与调用Something.all完全相同。在后一种情况下,范围将适用于你。因为.all可以作为范围。