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语法,并且以某种方式根据我可用的其他信息在查询时设置表名?