Rails 4 - 关于查询条件的habtm关系?

时间:2013-11-09 20:14:37

标签: ruby-on-rails ruby-on-rails-4

我目前有三种型号:

  • 标签(habtm:帖子)
  • 帖子(habtm:标签,有很多图片)
  • 图片(属于Post)

我想要,tag-controller,获取与标签关系的所有帖子,这些帖子与图像有关系。

有点像:

Tag.posts.where("images").nil?(当然不喜欢这个,但我希望你能看到我的目标)

首先,我是Rails的新手,并且没有在我的模型上做任何查询条件(仅* .all或* .find)

当然我可以获取属于该标签的所有帖子,遍历帖子并删除那些没有图像关系的帖子,但这似乎不正确;)

* 编辑:
也许我不清楚,我想得到与帖子有关系的所有标签(Tags.all()),它与图像有关。
更像是:Tags.all.posts.images!= null;)*

2 个答案:

答案 0 :(得分:0)

你可以这样做:

Tag.joins(posts: :images)

这将加载所有包含图片帖子的标签。

答案 1 :(得分:0)

在SQL中检查是否存在相关记录很容易,但这并不是一个简单的"据我所知,Rails中的语法。简单连接的问题在于,具有n个图像的帖子将在结果集中出现n次 - 您可以对结果执行不同的操作,但随着数据集的增加,效率会越来越低。

Tag.joins(:posts).where("exists (select null from images where images.post_id = posts.id)")

同样,没有图片的帖子的标签:

Tag.joins(:posts).where("not exists (select null from images where images.post_id = posts.id)")