我有一个AbstractRecord模型,其中一些具体模型(具有自己的表格)下降。以下是继承。Rails:如何有效地使用self.inherited
AbstractRecord < ActiveRecord::Base
Blog < AbstractRecord
Post < AbstractRecord
....
....
为了让Rails在继承时寻找合适的表,API文档说要定义一个类方法abstract_class?返回true,以便rails不会查找它的表。在我的情况下,为了让rails查找博客表(而不是abstract_records表,这在STI中通常是这种情况),我定义了方法abstract_class?在AbstractRecord中返回true。所有的查询似乎工作正常。但是当我实例化Blog时,我发现当rails的父类返回true时,rails在控制台中显示为Blog(抽象)。为了避免这种情况,我可以再次定义abstract_class?在Blog类中返回false。
但我在想,而不是定义abstract_class?在所有的子模型中,如果我能以某种方式使用self.inherited并在AbstractClass本身中定义该方法。我试图使用几种方法(以下)似乎没有工作。
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.instance_eval do
define_method(:abstract_class?) { false }
end
end
end
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.class_eval do
define_method(:abstract_class?) { false }
end
end
end
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.instance_eval do
def abstract_class?
false
end
end
end
end
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.class_eval do
def abstract_class?
false
end
end
end
end
什么我做错了任何建议表示赞赏?
否决由于没有得到 '继承' 方法的名字吧! – 2011-10-13 15:24:11