根据数据库中定义的字段生成表单

时间:2013-10-20 08:31:00

标签: ruby-on-rails ruby simple-form

我想根据数据库中定义的字段生成rails form runtime。

数据库的当前结构

**fields table**
 - id
 - field_name
 - field_value
 - field_type (text field, date, dropdown)
 - field_values (Basically for list of values to be shown for dropdown field_type)
 - field_validation

例如:如果我的数据库字段表存储了以下数据

  1 | employee_name | text_field |  | {blank => false, :length => 3..50}
  2 | gender        | dropdown   | male, female | {blank => false}

现在根据以上数据,我想生成如下所示的表格

  <%= simple_form_for(@field, url: eval(url)) do |f|  %>
      <%= f.input_text :employee_name %>
      <%= f.collection :gender %>
  <% end %>

1 个答案:

答案 0 :(得分:1)

我正在使用ActiveModel解决几乎相同的问题。

 # somewhere in metainfo model
def class_from_meta
  klass = Class.new do
    include ActiveModel::Model

    def self.name
      'Person'
    end
  end

  [:id, :email, :age].each do |attr|
    klass.instance_eval do
      attr_accessor attr
      validates_presence_of attr
    end
  end

  klass
end

# in controller
def create
  @person = MetaInfo.find(params[:meta_info_id]).class_from_meta.new
  respond_with @person
end

使用class_evalinstance_eval,您可以生成一个类似于ActiveRecord

的类。