【问题标题】:Rails-Active Record query : "where one of ... is in ... "Rails-Active Record 查询:“……其中之一在……”
【发布时间】:2014-01-04 17:49:32
【问题描述】:

我在 Post 模型和 Hashtag 模型之间存在“多通”关系。 我想要与列表中的一个主题标签匹配的所有帖子。目前我使用这个查询:

hashtags_ids = [2,7,8]
Post.includes(:hashtags).where(:hashtags => {:id => hashtags_ids})

它返回正确的帖子,但缺少其他标签。示例:
现有帖子 p1:
p1.content = "这是一篇文章"
p1.hashtags = [1,2]

查询将返回
p1.content = "这是一篇文章"
p1.hashtags = [2]

有没有办法保留其他标签?

【问题讨论】:

  • 为什么p1.hashtags返回一个ids数组而不是对象本身?

标签: ruby-on-rails activerecord


【解决方案1】:

您可以使用 joins 代替 includes

hashtags_ids = [2,7,8]
Post.joins(:hashtags).where(:hashtags => {:id => hashtags_ids})

这样,Rails 将使用多个 SQL 请求:第一个请求检索所有带有至少一个给定主题标签的帖子。接下来,当访问主题标签集合时,它将为每个检索到的帖子触发一个新的 SQL 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多