singleton对象在Ruby模块或Rails应用程序中的类中运行查询

时间:2013-06-08 04:46:32

标签: ruby-on-rails ruby-on-rails-3.2

我有几个跨多个表的聚合函数。目前,我将它们作为类方法放在其中一个类中,但是我们真的希望将它们放在一个中央模块或类中,因为它们并不是特定于类,我们现在将它们放在多个类中。我只是想把它们放在一个模块中但不能扩展ActiveRecord :: Base。像这样的东西,但这不起作用,因为没有global_aggregations的表:

class GlobalAggregation < ActiveRecord::Base

  def self.say_hello
    puts "say hello"
    sql="select * from locations" # this would join a bunch of tables
    items=self.find_by_sql(sql)
  end
end

有没有办法设置一个从ActiveRecord :: Base中获取的类只是为了获得查询接口而没有其他功能或其他想法如何处理这个?

1 个答案:

答案 0 :(得分:0)

您不希望创建一个继承自ActiveRecord::Base的类,因为根据定义继承的类应该是AR模型。您不希望使用补丁ActiveRecord::Base,因为这不是Base所有模型都可用的功能。您只需从另一个模块中调用Base方法:

module GlobalAggregator

  def say_hello
    puts "say hello"
    sql = "select * from locations" # this would join a bunch of tables
    items = ActiveRecord::Base.find_by_sql(sql)
  end

end