タグ付け可能な has_many タグのモデルがあるとします。関連付けられたタグの taggable_id フィールドですべてのタグ付け可能なものを見つけるにはどうすればよいですか?
Taggable.find(:all, :joins => :tags, :conditions => {:tags => {:taggable_id => [1,2,3]}})
結果は次のようになります。
SELECT `taggables`.* FROM `taggables` INNER JOIN `tags` ON tags.taggable_id = taggables.id WHERE (`tag`.`taggable_id` IN (1,2,3))
構文は信じられないほどですが、結果の sql がタグの一部、またはすべてを持つタグ付け可能なものを返すという点で、私のニーズには合いません。
フィールド taggable_id の値が 1、2、および 3 の関連タグを持つタグ可能オブジェクトを見つけるにはどうすればよいですか?
アドバイスをありがとう。:)
アップデート:
他の人がここにたどり着いた場合に投稿する解決策を見つけました。また、改善のための提案を喜んで受け取る他の人の注意も必要です。:)
Taggable.find(:all, :joins => :tags, :select => "taggables.*, tags.count tag_count", :conditions => {:tags => {:taggable_id => array_of_tag_ids}}, :group => "taggables.id having tag_count = #{array_of_tag_ids.count}"))