Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails按中的*all*关联标记.id查找_Ruby On Rails_Activerecord_Find_Has Many - Fatal编程技术网

Ruby on rails Rails按中的*all*关联标记.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有许多标记,我如何通过关联标记的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

谢谢你的建议。:)

更新:

我已经找到了一个解决方案,如果他们最终出现在这里,我将为他们发布。同时也感谢其他人的关注,我很高兴收到他们的改进建议。:)


你的问题有点让人困惑(“标签”似乎有点用:),但我想你想要的和我需要的一样:

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


这将获取与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