我想要一些子类,它们都应该有一个范围(同名)。尽管我知道直接继承不可能做到这一点,但基本思想如下:
class MySuperClass << ActiveRecord::Base
abstract_class = true
scope :scopeForAllSubclasses , lambda {|my_var| where(:var => my_var )}
end
class Subclass1 << MySuperClass
#has attribute var
end
class Subclass2 << MySuperClass
# has attribute var
end
所以现在我想打电话
Subclass1.scopeForAllSubclasses123).all
and
Subclass2.scopeForAllSubclasses(123).all
重点是我想要一组类,它们都通过设计实现了这个范围,而不仅仅是因为开发人员决定这样做。
有任何想法吗?
您可以使用 mixin 而不是超类来做到这一点:
module ScopeBuddy
def self.included base
base.instance_eval "scope :scopeForAllSubclasses , lambda {|my_var| where(:var => my_var )}"
end
end
class ClassA
include ScopeBuddy
end
class ClassB
include ScopeBuddy
end
这会将范围注入到每个实例中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)