2

我想根据数据库中定义的字段生成 Rails 表单运行时。

数据库的当前结构

**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 %>
4

1 回答 1

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_eval并且instance_eval您可以生成一个行为非常像的类ActiveRecord

于 2013-10-22T09:51:49.027 回答