ActiveRecord查询:从类别中的帖子中获取不同的用户

时间:2014-12-27 11:05:08

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

(Rails 4.1.6,Ruby 2.0.0)

我有一些用户,他们在类别中发布了一系列帖子。帖子拥有并属于许多 类别。我想获取已在类别中发布的用户列表。在搜索StackOverflow时,我发现了一些适用于单个类别的内容。

Category.find(2).posts.select(:user_id).distinct

不幸的是,当我合并类别时,我无法使其工作(两个类别都存在,两个都有帖子):

(Category.find(2).posts | Category.find(3).posts).select(:user_id).distinct

这导致:

ArgumentError: wrong number of arguments (1 for 0)
from (irb):137:in `select'

我的主要问题是为什么赢得这项工作?它适用于单个类别集合,并返回不同用户ID的列表。使用合并集合时,它不会。还有什么我可以尝试的吗?

结束目标:我希望通过循环构建更大的分类帖子集合,并使用这些类别中存在的帖子吸引不同的用户。

提前致谢!

----------- EDIT ----------------

迁移对您没有多大用处。

class User < ActiveRecord::Base

    has_many :posts

end

class Post < ActiveRecord::Base

    belongs_to :user    #post.user_id
    has_many :categories

end

class Categorization < ActiveRecord::Base

    belongs_to :post        #categorization.post_id
    belongs_to :category    #categorization.category_id

end


class Category < ActiveRecord::Base

    has_many :categorizations
    has_many :posts, :through=>:categorizations

end

3 个答案:

答案 0 :(得分:3)

这就是你需要的:

Category.
joins(:posts).
where(categories: {id: [1,2]}).
pluck("DISTINCT posts.user_id")

那就是得到一个user_id数组。获取具有user_id属性的对象:

Category.
joins(:posts).
where(categories: {id: [1,2]}).
select("posts.user_id").
distinct

答案 1 :(得分:0)

我建议您使用where代替find,如下所示:

Category.where(:id => [2,3]).select(:user_id).distinct

答案 2 :(得分:0)

试试这个

Category.pluck(:user_id).uniq