假设我有一个模型 Taggable 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?
感谢您的任何建议。:)
更新:
我找到了一个解决方案,如果他们最终出现在这里,我会为其他人发布。也不过为了引起其他人的注意,他们的改进建议我很乐意接受。:)
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}"))