拥有一个包含多个表的数据库。所有表都具有相同的结构。我正在编写一个小型Web应用程序,以便在Ruby / Sinatra上使用此数据库。我想使用ORM简化表的工作 - Active Record或DataMapper(首选)。为多个表使用单个模型的手册提供了类似的内容:
class Table
include DataMapper::Resource
property id, Serial
property item, String
end
class TableA < Table
self.table_name = 'table_a'
end
class TableB < Table
self.table_name = 'table_b'
end
如何在没有copypaste的情况下为数十个表格做到这一点?
如果可能,决定是否可以在不更改代码/设置的情况下添加/删除表,并重新启动应用程序。
类似的东西:
# Model declaration
DataMapper.finalize
itemA = Table.new (use_table: 'table_a')
itemB = Table.new (use_table: 'table_b')
答案 0 :(得分:0)
实现此目的的一种方法是使用eval。
class Table
include DataMapper::Resource
property id, Serial
property item, String
end
table_names = {'TableA' => 'table_a', 'TableB' => 'table_b'}
table_names.each do |klass_name, table_name|
eval <<DYNAMIC
class #{klass_name} < Table
self.table_name = '#{table_name}'
end
DYNAMIC
end