TL; DR - могу ли я установить имя таблицы во время запроса (не set_table_name - не хочу его на уровне класса) и использовать искатели арельского стиля без надлежащего представления модели (foo.rb) в моем кодовая
Длинная версия ...
У меня на складе две дюжины таблиц с согласованной схемой:
date | some_foreign_key | total
Допустим, таблицы названы
activity_by_foo
activity_by_bar
activity_by_baz
Если бы я следовал за АР по частям, у меня было бы три класса моделей:
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) и каким-то образом установить имя таблицы во время запроса на основе другой доступной мне информации?