Условия ассоциации ActiveRecord (Rails)
-
05-07-2019 - |
Вопрос
Представьте, что у меня есть модель, сообщение, в котором есть_много: комментариев.Как я могу отображать только сообщения с комментариями?
Меня несколько устраивает именованный_скоп, но я не знаю, как поместить Post.comments (или self.comments) в хэш :conditions, который ожидает символы.
class Post < ActiveRecord::Base
has_many :comments
named_scope :with_comments, :conditions => [#self.comments.length > 0]
end
Что мне написать в комментариях?
Спасибо!
Решение
Возможно, лучше было бы разместить counter_cache в Post.
class Comment < AR:Base
belongs_to :post, :counter_cache => true
end
Тогда вам нужно будет выполнить всего один запрос вместо двух.
Post.find(:all, :conditions => ["counter_cache > 0"])
Другие советы
У вас должна быть возможность просто присоединиться к таблице комментариев, выбрав отдельные строки.
named_scope :with_comments, :joins => :comments, :select => 'DISTINCT posts.*'
Не связан с StackOverflow