как мне присоединиться и включить ассоциацию - PullRequest
1 голос
/ 26 февраля 2010

Как мне использовать include и join в именованной области? Пост полиморфный

class Post
  has_many :approved_comments, :class_name => 'Comment' 
end

class Comment
  belongs_to :post
end

Comment.find(:all, :joins => :post, :conditions => 
                     ["post.approved = ? ", true],      :include => :post)

Это не работает, так как joins выполняет внутреннее соединение, а include делает пропущенное соединение. База данных выдает ошибку, поскольку оба соединения не могут быть в одном запросе.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2010

Если вы хотите получить все утвержденные сообщения с их комментариями, вы можете просто сделать что-то вроде этого:

Post.find(:all, :include => "comments", :conditions => ['approved = ?', true])

Это даст вам все утвержденные сообщения со всеми комментариями. Вы не должны, вероятно, использовать соединение, так как это приведет к слишком большому набору данных (столбцы продукта будут включены для каждого связанного с ним комментария).

0 голосов
/ 26 февраля 2010

Вы уже пробовали просто пропустить :joins часть вызова ActiveRecord? В моем тестовом случае ассоциации has_many :include будет использовать соединение, если ваши условия относятся к включенному имени таблицы. Например,

Comment.all :include => :post

выполнит всего два запроса: один для комментариев и один для их сообщений. Команда Rails говорит, что это лучшая производительность. Однако, если Rails обнаружит, что ваши условия требуют объединения,

Comment.all :include => :post, :conditions => ['post.approved = ?', true]

запустит один запрос, так как он вам нужен.

Разве ActiveRecord не такой умный?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...