动态创建Active Record类会导致查询结果失败

时间:2015-09-15 08:15:05

标签: ruby-on-rails activerecord

我需要动态创建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 个答案:

答案 0 :(得分:-1)

为什么要尝试基于Session而不是ActiveRecord :: Base创建新类?

无论如何,它看起来像这个问题的完全重复: Dynamically create a class inherited from ActiveRecord?

相关问题