0

我目前有三个模型:

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

我想要,标签控制器,获取与标签相关的所有帖子,这与图像有一些关系。

有点像:

Tag.posts.where("images").nil?(当然不是这样,但我希望你能看到我要去的地方)

首先,我对 Rails 很陌生,还没有对我的模型做任何查询条件(只有 *.all 或 *.find)

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

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

4

2 回答 2

0

你可以这样做:

Tag.joins(posts: :images)

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

于 2013-11-12T07:19:52.183 回答
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)")
于 2013-11-12T07:44:30.763 回答