我在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)
对不起,很长的帖子。 如何实现作用域关联的预加载,但不能对关联本身进行范围化?
基本上,我想预先加载经常使用的许多属性中的一个,但仍然可以按需获取其他属性。 谢谢!