【发布时间】:2011-10-07 13:57:00
【问题描述】:
例如,假设您有:
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?您只是在复制现有的 ar has_many 查询查找代码
-
不,我不知道。你看我根本没有 WHERE 条件。
-
那么我想我完全不知道为什么你的模型设置方式是这样的。如果你想要Something对象的整个集合,你不应该在Model上将它声明为has_many——因为这意味着它是一个一对多的关系。为什么不直接使用您自己的类方法,该方法返回一个 AR::Relation 对象和您正在寻找的 Something 对象?
-
@Filip:您应该接受答案或解释为什么它不好。感谢其他用户的努力。
标签: ruby-on-rails has-many named-scope