Мне нужно создать класс ActiveRecord динамически, потому что я не знаю имя таблицы заранее. Таким образом, у меня есть функция для создания классаДинамическое создание активного класса записи приводит к ошибке результата запроса
def create_session_class(table_name)
session = Class.new(Session) do
self.table_name = table_name
end
end
В приведенном ниже результате подсчета в порядке
session = create_session_class('test1_sessions')
session.where(status: 10).count #could got correct result.
Но я нашел, когда я пытаюсь запросить запись из класса. он будет использовать имя таблицы (sessions
), чтобы найти не имя таблицы (test1_sessions
). Например.
session = create_session_class('test1_sessions')
session.where(status: 10).each do |se|
puts se.name
end
Приведенный выше код будет бросать ошибку
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "sessions" does not exist
LINE 5: WHERE a.attrelid = '"sessions"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid,
a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"sessions"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
Я пытаюсь использовать load
но не работает тоже.
session = create_session_class('test1_sessions')
session.where(status: 10).load.each do |se|
puts se.name
end
Кажется, на основе ActiveRecord :: Base нормально. Но просто хотите знать почему? –