使用DataMapper动态创建表(类)?

时间:2015-11-27 12:09:42

标签: ruby sinatra datamapper

所以,我试图建立一个小型的社交网络"出于教育目的,但我坚持要给用户和朋友#34;在数据库中。你可以用一种更简单的方式做到这一点,但我能想到的唯一方法是为每个包含他们朋友的用户提供一个单独的表。

但是,为此,我需要使用变量作为表名动态创建表。我已尝试使用const_set,但似乎由于某种原因它无法使用DataMapper(或者我可能只是愚蠢)。当我试图添加属性时,继续收到uninitialized constant Serial之类的错误。

那我该怎么办?有解决方案吗?我可以通过其他方式动态创建表吗?或者有更简单的方法来拯救朋友。

感谢。

1 个答案:

答案 0 :(得分:0)

module DMSerial
  def self.included base
    base.class_eval do
      include DataMapper::Resource
      property :id,           base::Serial
    end
  end
end

def create_model model_name, &block
  Object.const_set(model_name, Class.new)
  model = Object.const_get(model_name)
  model.class_eval {include DMSerial}
  model.class_eval &block
end

[1,2,3].each do |num|

  create_model "Model#{num}" do
    property :val,  Integer, :default => num
  end

end