ORM一个模型 - 乘法表

时间:2014-07-20 07:23:51

标签: ruby activerecord orm datamapper

拥有一个包含多个表的数据库。所有表都具有相同的结构。我正在编写一个小型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')

1 个答案:

答案 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