我想根据数据库中定义的字段生成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 %>
答案 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_eval
和instance_eval
,您可以生成一个类似于ActiveRecord