0
所以我跟在他们一些ActiveRecord对象,而如果它的事项,是在一个单表继承层次结构中的宝石红宝石的宝石和地方对象覆盖
# gem
class MySTIBaseClass < ActiveRecord::Base
# some code, does NOT implement a default_scope
end
当我在Rails应用程序试图定义一个default_scope
class MySTIBaseClass < ActiveRecord::Base
default_scope :order => "my_sti_bases.name ASC"
end
class MySTIOtherClass < MySTIBaseClass
# this is not in the gem, only in the rails application
scope :active, { where active: true }
end
MySTIOtherClass.active # order default scope is not applied
然而,如果不是重新打开类我把代码中的初始化:
# initializer
MySTIBaseClass.instance_eval do
default_scope :order => "my_sti_bases.name ASC"
end
# when the app is running
MySTIOtherClass.active # default_scope is applied
不过,我真的不能似乎明白了为什么是这种情况。看起来MySTIOtherClass.active
在所有声明已经被评估之前都没有被调用,所以在应用程序中运行的类的版本应该能够全面了解所有声明的内容。有没有冲突的default_scopes,它是选择最后一个声明,所以它看起来像默认范围应该工作不管。
Intereting!有没有办法强制轨道重新加载模型? – DVG
你可以做这样的事情Dir.glob( “#{} Rails.root /应用/模型/ * RB”)sort.each {|。文件|初始化程序中的require_dependency file} – bridiver