rails在一个查询中获取许多对象的关联模型的属性

时间:2014-03-17 07:49:08

标签: ruby-on-rails model many-to-many

我的头衔可能令人困惑,我不确定要写什么。

在rails中,我了解如何为一个父对象

获取多个对象
@first_user = User.first
@first_user_posts = @first_user.posts

但是如何为许多父对象获取多个对象并在一个查询中选择其属性?我想做那样的事情:

@many_posts = Post.all
@posts_by_user_gender = @many_posts.joins(:user).map(&:gender)

希望它能给我一个看起来像这样的数组:

@posts_by_user_gender => ["male", nil, "female", nil]
#I know I can do this map technique if I fetch it directly from the User model
# User.all.map(&:gender), 
# but I want to start with those that posted in a specific category
# Post.where(:category_id => 1) 

然后计算我可以使用Ruby Array method .count

的男性
@males_count_who_posted = @posts_by_user_gender.count("male")
=> 1

我总是可以进行3次单独查询

@males_count_who_posted = @many_posts.select(:user_id).joins(:user)
                                      .where("gender = ?", "male").count
@females_count_who_posted = ...

但我觉得效率非常低,特别是如果我做同样的事情,比如" industry"你可以有超过3个选项。

1 个答案:

答案 0 :(得分:0)

您可以通过SQL语法

加入模型
@posts_by_user_gender = @many_posts.joins("LEFT JOIN Users where users.id=posts.user_id").joins("LEFT JOIN Genders where genders.id=user.gender_id")