Ruby on rails Rails按中的*all*关联标记.id查找
假设我有一个模型Taggable有许多标记,我如何通过关联标记的Taggable id字段找到所有标记Ruby on rails Rails按中的*all*关联标记.id查找,ruby-on-rails,activerecord,find,has-many,Ruby On Rails,Activerecord,Find,Has Many,假设我有一个模型Taggable有许多标记,我如何通过关联标记的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.i
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
谢谢你的建议。:)
更新:
我已经找到了一个解决方案,如果他们最终出现在这里,我将为他们发布。同时也感谢其他人的关注,我很高兴收到他们的改进建议。:)
你的问题有点让人困惑(“标签”似乎有点用:),但我想你想要的和我需要的一样: 或者(如果您希望结果是唯一的,您可能会这样做):
这将获取与ID为1、2和3的标记具有相同标记的所有标记。这就是你想要的吗?嗨,谢谢你的回复。很抱歉解释得不好,我认为这个场景比我实际使用的场景更熟悉。恐怕我不想通过taggables的id查找taggables,而是通过其关联标记的Taggableu id查找taggables。这种事情可以通过GroupBy在mysql中完成,但不希望将mysql写入我的应用程序。抱歉,仍然不完全清楚。那么您的数据库中有一个连接表,它位于标记和标记之间?你能写SQL吗?我会帮你翻译成Ruby。
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}"))
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