我在子模型中有一个范围:
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"
但是我觉得上面的解决方案有点脏。它重复有关子实体的信息。
欢迎任何想法