我的头衔可能令人困惑,我不确定要写什么。
在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个选项。
答案 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")