【发布时间】:2010-04-02 16:39:06
【问题描述】:
假设我有一个模型 Taggable has_many tags,我如何通过关联标签的 taggable_id 字段找到所有 taggables?
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}"))
【问题讨论】:
标签: ruby-on-rails activerecord find has-many