我想为LEFT OUTER JOIN
finder中的:include
选项生成的ActiveRecord
添加其他条件。
class Post
has_many :comments
end
class Comment
belongs_to :post
has_many :comment_votes
end
class CommentVote
belongs_to :comment
end
现在让我们说我想找到最近10篇帖子及其相关评论和最多投票。
Post.find.all(:limit => 10, :order => "created_at DESC",
:include => [{:comments => :comment_votes])
我无法添加条件来检查投票,因为它会忽略没有投票的帖子。因此条件必须转到为comment_votes
生成的JOIN的ON子句。我希望语法如下:
Post.find.all(:limit => 10, :order => "created_at DESC",
:include => [{:comments => [:comment_votes, :on => "comment_votes.vote > 0"])
你以前遇到过这样的问题吗?您是否设法使用当前的查找程序解决了问题?我希望从社区中听到一些有趣的想法。
PS:我可以编写一个连接SQL来获得预期的结果并将结果拼接在一起。我想确保在沿着这条道路前没有其他选择。
答案 0 :(得分:3)
如果我正确地关注了你的问题,这样的事情可能有效:
class Comment
belongs_to :post
has_many :comment_votes
has_many :up_votes, :class_name => "CommentVote", :conditions => "vote > 0"
end
然后你的发现者将是:
Post.find.all(:limit => 10, :order => "created_at DESC",
:include => {:comments => :up_votes})
注意:我没有测试过这个。