(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
答案 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