Rails可以“提升”has_many关系

时间:2013-11-01 23:36:54

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

想象一下留言板User每个has_many Post s。

我有一个范围让我回复了一堆Post s,而我想要做的就是从那里开始到User s。

我可以迭代,对于每个Post,将其User添加到关系中,然后重复删除User,但必须有一个更简单的方法,不是吗? / p>

2 个答案:

答案 0 :(得分:1)

Posts.where('created_at>?',Time.now - 1.day).map(&:user).uniq

帖子查询将返回一组帖子。您需要将这些帖子映射到用户,然后将该集合截断为唯一用户(因为帖子可能属于同一个用户)。

急切加载:

Posts.where('created_at>?',Time.now - 1.day).includes(:user).map(&:user).uniq

这样,您每次尝试从帖子中提取用户时都不必进行查询。

答案 1 :(得分:1)

你必须加入这两个表:在我的例子中,我假设你想获得过去24小时内发布的所有用户名:

    # joining posts with users
Post.joins(:user)

    # filtering all posts that are older than 1 day
    .where("posts.created_at > ?", Time.now - 1.day)

    # selecting every user only once
    .select("users.id").uniq

    # then selecting the fields you want to work with
    .select("users.name")