Я хочу добавить дополнительные критерии к LEFT OUTER JOIN
, сгенерированному параметром :include
в ActiveRecord
finder.
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])
Я не могу добавить условие, чтобы проверить наличие голосов, так как он будет игнорировать сообщения без голосов. Таким образом, условие должно идти в предложение ON для JOIN, сгенерированного для comment_votes
. Я желаю такой синтаксис, как:
Post.find.all(:limit => 10, :order => "created_at DESC",
:include => [{:comments => [:comment_votes, :on => "comment_votes.vote > 0"])
Сталкивались ли вы с такими проблемами раньше? Вам удалось решить проблему с помощью текущего поиска? Я надеюсь услышать некоторые интересные идеи от сообщества.
PS: Я могу написать SQL для соединения, чтобы получить ожидаемый результат и соединить результаты вместе. Я хочу убедиться, что нет другой альтернативы, прежде чем идти по этому пути.