Rails通过* all * associated tags.id查找

时间:2010-04-02 16:39:07

标签: ruby-on-rails activerecord find has-many

假设我有一个模型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。

如何找到字段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}"))

1 个答案:

答案 0 :(得分:0)

您的问题有点令人困惑(“标签”似乎使用了很多:)),但我认为您需要我需要的同样的事情here

Taggable.find([1,2,3], :include => :tags).tags.map { |t| t.taggables }

或(如果您希望结果是唯一的,您可能会这样做):

Taggable.find([1,2,3], :include => :tags).tags.map { |t| t.taggables }.flatten.uniq

这可以获得与具有ID 1,2和3的可标记具有相同标记的所有可标记。这是您想要的吗?