направляющие находят: использование условий, в то время как включая ту же таблицу дважды через различные именованные ассоциации

У меня есть сообщения, которые отправляются пользователями другим пользователям. Существует две модели-: сообщение и: пользователь, и: сообщение имеет следующие именованные ассоциации:

belongs_to :from_user, :class_name => "User", :foreign_key => "from_user_id"
belongs_to :to_user, :class_name => "User", :foreign_key => "to_user_id"

Оба: пользователь и: сообщение имеет "is_public" столбец, указывая, что или единственная публикация и/или весь профиль пользователя могут быть общедоступными или частными.

Моя цель состоит в том, чтобы выбрать список публикаций, которые общедоступны И у чьих получателей есть общедоступные профили. В то же время я хотел бы "включать" и отправителя и информацию о получателе для уменьшения # вызовов дб. Проблема состоит в том, что я эффективно "включаю" ту же таблицу дважды через именованные ассоциации, но в моих "условиях" я должен удостовериться, что только фильтрую "is_public" столбцом получателя.

Я не могу сделать следующего, потому что "условия" не принимают название ассоциации в качестве параметра:

Post.find(:all, :include => [ :to_user, :from_user ], 
  :conditions => { :is_public => true, :to_user => { :is_public => true }})

Так, один способ, которым я могу выполнить это, путем выполнения дополнительного "соединения" на "пользовательской" таблице:

Post.find(:all, :include => [ :to_user, :from_user ], 
  :joins => "inner join users toalias on posts.to_user_id = toalias.id", 
  :conditions => { :is_public => true, 'toalias.is_public' => true })

Существует ли лучшее, возможно, более чистое, способ сделать это?

Заранее спасибо

7
задан avioing 26 July 2010 в 17:29
поделиться