Sql Rails:Getting all有许多与父对象的活动关系相关的对象

Sql Rails:Getting all有许多与父对象的活动关系相关的对象,sql,ruby-on-rails,has-many,active-relation,Sql,Ruby On Rails,Has Many,Active Relation,我怀疑这是一个基本问题。在我的rails应用程序中,一个用户拥有许多分数。是否有一种方法可以获得用户之间活跃关系的所有分数。我可以做user.scores(显然),但如果用户是一组用户,我需要做类似于users.scores的事情。这显然是不正确的 您可以使用 Score.where(user: users) 这将像sql一样构造 select * from scores where user_id in (select *.id from users where ..) 你可以用 Sco

我怀疑这是一个基本问题。在我的
rails
应用程序中,一个
用户
拥有许多
分数
。是否有一种方法可以获得用户之间活跃关系的所有分数。我可以做user.scores(显然),但如果用户是一组用户,我需要做类似于
users.scores
的事情。这显然是不正确的

您可以使用

Score.where(user: users)
这将像sql一样构造

select * from scores where user_id in (select *.id from users where ..) 
你可以用

Score.where(user: users)
这将像sql一样构造

select * from scores where user_id in (select *.id from users where ..) 

你试过以下方法吗

@users.collect(&:scores).flatten!

你试过以下方法吗

@users.collect(&:scores).flatten!

我认为公认的答案更有效。如果我错了,请更正。这两种方法都将生成相同的基础
sql
。使用哪一个取决于您的场景和其他上下文。不管是哪种方式,我都会将此逻辑转移到可测试性和维护模型中。但是可以使用
包含
@users.includes(:分数)。collect(&:scores)。flatten-这将只有2个查询。好的呼叫@MikDiet,没有意识到。我认为接受的答案更有效。如果我错了,请更正。这两种方法都将生成相同的基础
sql
。使用哪一个取决于您的场景和其他上下文。不管是哪种方式,我都会将此逻辑转移到可测试性和维护模型中。但是可以使用
包含
@users.includes(:分数)。collect(&:scores)。flatten-这将只有2个查询。很好的呼叫@MikDiet,没有意识到这一点。