1

我需要将 ActiveRecord 模型类自动转换为 MongoDB Document 类。我可以使用 rails 生成器来执行此操作,该生成器将读取模型的属性并生成新的 document.rb。

如果 ActiveRecord 模型类如下所示:

class Project < ActiveRecord::Base
  attr_accessible :completed, :end_date, :name, :start_date
end

然后,一个生成的类确认 Mongoid 的结构将如下所示:

class ProjectDocument
  field :name, type: String
  field :start_date, type: Date
  field :end_date, type: Date
  field :completed, type: Boolean
  field :created_at, type: Time
  field :updated_at, type: Time
end

但我不想存储不同的文档文件,每个模型一个。每当启动 rails 应用程序时,我都希望能够即时生成此文档类。

这可能吗?是否建议使用这种从内存中生成和使用类的方法?我对 AR 模型结构的更改没有限制;该文档是灵活的 wrt 数据结构,更改的列将自动添加。

4

1 回答 1

0

我的第一次尝试看起来像这样:

klass = Project
new_class = Object.const_set(klass.name + "Document", Class.new)
klass.columns.each do |c|
  new_class.class_eval do
    field c.name.to_sym, type: c.type
  end
end

您几乎可以肯定必须做一些更复杂的事情来正确设置字段类型,但这应该会给您一个很好的起点。

于 2013-01-18T04:35:42.797 回答