Найти название модели по названию таблицы (продолжение ORM) - PullRequest
0 голосов
/ 23 февраля 2012

В скрипте ruby ​​я запускаю цикл, в котором я динамически получаю имя таблицы из списка таблиц и должен выполнить какую-то операцию CRUD (в основном, вставку) над ней.Я использую Sequel Orm и создал модели для различных таблиц.Как мне найти имя модели для каждой таблицы, чтобы я мог выполнить вставку?

    tables=["table1","table2",'table3",...]
    tables.each do |t|
    #perform insertion on t
    #how to find the model name for table t?
    end

Я могу использовать хэш для хранения названий моделей для каждой таблицы или следовать шаблону, например, преобразовавпервый символ каждой таблицы в верхнем регистре или что-то в этом роде.

Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 23 февраля 2012

То, что вы спрашиваете, невозможно в общем случае без поиска методом грубой силы, и даже в этом случае оно неоднозначно по той простой причине, что справедливо следующее:

class Foo < Sequel::Model(:table1); end
class Bar < Sequel::Model(:table1); end

По сути, каждая модель имеет связанный набор данных (обычно это просто таблица SELECT * FROM). Однако другие модели могут использовать тот же или аналогичный набор данных. Таким образом, переход от модели к столу прост, а от таблицы к модели - нет.

Если вы создали свои собственные модели, самый простой способ обработать то, что вы хотите, это использовать хеш:

ModelMap = {}
ModelMap["table1"] = Model1
ModelMap["table2"] = Model2

Тогда вы можете просто сделать:

ModelMap[t]

внутри каждого блока для получения класса модели.

...