0

我有一个抽象类:

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。

4

1 回答 1

1

除非您尝试执行 STI,否则您应该使用 self,在这种情况下您不需要设置 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
于 2013-04-29T20:18:52.623 回答