【问题标题】:Dynamic creation of tables (classes) with DataMapper?使用 DataMapper 动态创建表(类)?
【发布时间】:2016-03-01 15:22:10
【问题描述】:

所以,我正在尝试为教育目的制作一个小型“社交网络”,但我坚持在数据库中为用户提供“朋友”。您可能可以用一种更简单的方式来做到这一点,但我能想到的唯一方法是为每个包含他们朋友的用户创建一个单独的表。

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

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

谢谢。

【问题讨论】:

  • 为什么需要多个表?
  • 设法想出了一个解决方案。不过仍然很好奇如何做到这一点。它可能会派上用场。
  • 您最好回答自己的问题,然后勾选该答案以表明它是一个有效的解决方案。其他与您有相同问题的人会很高兴知道解决方案是什么。
  • 问题是我还没有找到我的问题的答案,我只找到了我的问题的另一种解决方案。我仍然很好奇如何做到这一点。

标签: ruby sinatra datamapper


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 2015-11-22
    • 2020-05-03
    • 2014-03-20
    • 2011-12-14
    • 2012-01-08
    • 2012-12-22
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多