Model Proliferation /能够在运行时设置表名

时间:2011-11-10 21:15:34

标签: ruby-on-rails activerecord

TL; DR - 我可以在查询时设置表名(不是set_table_name - 不希望它在类级别)并使用arel样式的查找器,而不是在我的模型中正确表示模型(foo.rb)基本代码?

长版......

我在仓库中有二十几个表,表格中的表格一致:

date | some_foreign_key | total

假设这些表名为

activity_by_foo
activity_by_bar
activity_by_baz

如果我关注AR part-and-parcel,我会有三个模型类:

app/models/activity_by_foo.rb
app/models/activity_by_bar.rb
app/models/activity_by_baz.rb

我可以在每个类中包含一个模块来处理常见查找或编写基类,并在每个模型中显式调用'set_table_name'以允许它工作:

class Activity < ActiveRecord::Base
  def self.totals_for_period(start_date, end_date, id) 
     select(:total).where(:start_date => start_date, :end_date => end_date,  :some_foreign_key => id).sum(:total)
  end
end

但是,我想完全清除activity_by_foo / bar / baz类,并动态地做一些事情。假设我没有为模型添加额外的行为,我实际上只是提取数据用于演示,我是否仍然可以在'虚拟'ActiveRecord类(在本例中为Activity)中使用arel样式的finder语法,并且以某种方式根据我可用的其他信息在查询时设置表名?

0 个答案:

没有答案