我需要动态创建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
答案 0 :(得分:-1)
为什么要尝试基于Session而不是ActiveRecord :: Base创建新类?
无论如何,它看起来像这个问题的完全重复: Dynamically create a class inherited from ActiveRecord?