我有一个抽象类:
class AbstractBrowsable < ActiveRecord::Base
self.abstract_class = true
attr_accessible :heading
[...]
def get_following(count)
AbstractBrowsable.where("heading > ?", self.heading).order('heading ASC').limit(count)
end
end
它有一些像上面那样的通用查询,所以在子类中我需要设置表名,例如。
class Subject < AbstractBrowsable
AbstractBrowsable.table_name = "subjects"
end
我可以让它工作的''唯一'方式如上所示,即AbstractBrowsable.table_name = "subjects"
而非self.table_name = 'subjects'
。这对我来说似乎很可疑,而我的Google-Fu只使用self.
显示了示例。这样可以,或者我错过了什么?
如果你还没有猜到,我是Ruby / Rails的新手;任何帮助非常感谢。我的Rails版本是3.2.13,Ruby是1.9.3。
答案 0 :(得分:1)
你应该使用self,除非你试图做STI,在这种情况下你不需要设置abstract_class。
- 编辑 -
根据您在评论中描述的内容,您需要将功能构建到模块中并将其包含在您的课程中。这是Ruby中模块的目的。
建议阅读:http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
以下是一个例子:
module Browsable
# Browsable methods
end
class Subject < ActiveRecord::Base
include Browsable
#
end