存储动态形式的数据

| 我正在开发动态表单生成器。有人可以创建字段,例如:字符串,文本,布尔值,数字,文件等。 是否有任何宝石或准则来存储来自这种动态形式的数据? 我的意思是我可以为每种数据类型创建许多表,或者将所有表存储为标记值必须转换的“ 0”。 UPD 还是我最好在这里使用nosql?     
已邀请:
        我相信Mongodb是此应用程序的正确选择,因为它不强制执行任何模式,对于任意数据而言,它是一个不错的选择。 同样,它确实支持您期望的所有数据类型。所以很容易 有一个看起来像这样的表单集合(Ruby Mongoid代码)
  class XForm
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia

       field :name, :type => String
       field :user, :type => BSON::ObjectId     

       embeds_many :formfields
  end
 class Formfields
  include Mongoid::Document

     field :name, :type => String
     field :kind, :type => String
     #field :value, :type => String -> dont add it in formfields, make it dynamic sine the type varies

  embedded_in :xform
  end
要将值字段添加为动态字段,需要在mongoid.yml中启用
allow_dynamic_fields: true
并像这样创建一个新字段
  form = XForm.new(:name=>\'test form\',:user => current_user.id)
   #for integer field
   form.formfields << Formfields.new(:name => \"Age\",:kind=>\"Integer\", :value => 21)
   #for bool field
   form.formfields << Formfields.new(:name => \"isMarried\",:kind=>\"Boolean\",:value => true)
   #for string field
   form.formfields << Formfields.new(:name => \"name\",:kind=>\"String\",:value => \"ram\")
希望这可以帮助     
        我喜欢这种方法。
class User < ActiveRecord::Base
  [:field_1, :field_2, :field_3].each do |method|
    define_method method do
      workable_arbitrary_content[method]
    end

    define_method \"#{method}=\" do |value|
      data = workable_arbitrary_content.merge(method => value)
      self.arbitrary_content = YAML.dump(data)
    end
  end

  private
    def workable_arbitrary_content
      YAML.load(arbitrary_content || \"\") || {}
    end
end
在这种情况下,您将创建3个虚拟字段,这些字段将另存为YAML。 在ѭ6中创建一个名为
arbitrary_content
的文本类型的字段。 这是上面代码的一些规格。
describe User do
  context \"virtual fields\" do
    before(:each) do
      @user = User.new
    end

    it \"should be able to handle strings\" do
      @user.field_1 = \"Data\"
      @user.field_1.should eq(\"Data\")
    end

    it \"should be able to handle integers\" do
      @user.field_2 = 1
      @user.field_2.should eq(1)
    end

    it \"should be able to handle symbols\" do
      @user.field_3 = :symbol
      @user.field_3.should eq(:symbol)
    end

    it \"should be possible to override a field\" do
      @user.field_3 = :symbol
      @user.field_3 = \"string\"

      @user.field_3.should eq(\"string\")
    end

    it \"should be possible to set more then one field\" do
      @user.field_1 = :symbol
      @user.field_2 = \"string\"

      @user.field_1.should eq(:symbol)
      @user.field_2.should eq(\"string\")
    end
  end
end
    

要回复问题请先登录注册