Rails Active Record Limited渴望加载

时间:2017-01-26 16:15:17

标签: ruby-on-rails activerecord scope associations preloading

我在Rails 5.0中使用Active Record模型有以下(简化)场景:

class Group
has_many :players

class Player
has_many :attributes

class Attr
attr :name

我想获取属于某个组的所有玩家的列表,其中“pro / amateur”属性已预先加载,但没有将“属性”关系全部放在一起(即只是预加载这些属性但是根据请求提供所有“属性”关联记录 - 无范围)

我的第一个方法是:

class Player
  scope :with_player_attributes_loaded, ->
   Group.find(1).players.includes(:attr).where(:attr => { :name => "pro/amateur" }.references(:attr)) 

这只是范围的属性关联本身而不是只预加载此关联的一个子集

确定:

Group.find(1).players.with_player_attributes_loaded 

1组N名队员,每名队员有1个属性

不行:

Group.find(1).players.with_player_attributes_loaded.first.attributes 

不会返回所有第一个玩家的属性(假设它在数据库中的数量超过1)

对不起,很长的帖子。 如何实现作用域关联的预加载,但不能对关联本身进行范围化?

基本上,我想预先加载经常使用的许多属性中的一个,但仍然可以按需获取其他属性。 谢谢!

0 个答案:

没有答案