#ruby-on-rails #activerecord
#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 как неотъемлемая часть, у меня было бы три класса модели:
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 и сделать что-то более динамичное. Предполагая, что я не добавляю никакого дополнительного поведения к модели, я буквально просто извлекаю данные для представления, могу ли я по-прежнему использовать синтаксис поиска в стиле arel в «виртуальном» классе ActiveRecord (в данном случае Activity) и каким-то образом задавать имя таблицы во время запроса на основе другой доступной мне информации?