我正在尝试设计这种查询机制,在该机制中,我具有与Tag
模型相关联的模型(具有多态关联as: taggable
),以便当我运行a:modelA.modelBs时,它将进行检查如果modelA
实例和modelBs
关联responds_to?(:tags)
关联,则按标签的交集过滤查询。
示例
# modelA_instance1.tags == [1, 4, 9]
# modelA_instance2.tags == [2, 3]
# modelB_instance1.tags == [1, 2]
# modelB_instance2.tags == [4]
expect(modelA_instance1.modelBs).to contain_exactly([modelB_instance1, modelB_instance2])
expect(modelA_instance2.modelBs).to contain_exactly([modelB_instance1])
但是理想情况下,我希望它是无缝的,而不必使用加入has_many :modelBs
模型的范围来定义:tags
有可能吗?我可以覆盖ActiveRecord的(或某些)吸气剂来做到这一点吗?
或者我可以创建在has_many
上扩展的内容,例如has_many_tagged :modelBs
def has_many_tagged(... scope ...)
# extend scope with join on tags and call original has_many
end