Распространение модели / Возможность задать имя таблицы во время выполнения - PullRequest
1 голос
/ 11 ноября 2011

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) и каким-то образом установить имя таблицы во время запроса на основе другой доступной мне информации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...