2015-09-15 4 views
0

Мне нужно создать класс 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 

ответ

-1

Почему вы пытаетесь создать новый класс на основе сеанса вместо ActiveRecord :: Base?

Во всяком случае, это выглядит как полный дубликат по этому вопросу: Dynamically create a class inherited from ActiveRecord?

+0

Кажется, на основе ActiveRecord :: Base нормально. Но просто хотите знать почему? –