在急切的装载条件下的范围

时间:2014-11-27 16:51:49

标签: ruby-on-rails eager-loading

我在子模型中有一个范围:

class Message
  scope :non_system, -> { where('user_id != 0') }

这是我父模型的初始版本:

class Group < ActiveRecord::Base
  has_many :messages

问题是如果我在生成新查询的急切加载的子项的表示层中指定范围:

#Eager loading in the controller
groups.includes(:messages)

#in the presentation entity
#This will create a new query
group.messages.non_system

一种可能的解决方案是在表示层上使用另一个关联:

group.non_system_messages.last

然后使用包含范围的自定义查询在父对象上创建该关联:

class Group < ActiveRecord::Base
   has_many :messages
   has_many :non_system_messages, -> { non_system }, class_name: "Message"

但是我觉得上面的解决方案有点脏。它重复有关子实体的信息。

欢迎任何想法

0 个答案:

没有答案