我有一個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