2013-10-20 87 views
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 %> 
+0

去這裏:https://www.ruby-toolbox.com/看看 – phoet

+0

感謝Phoet 我已經搜索ruby-toolbox.com不同的選項。 –

+0

指出什麼是「在哪裏可以做X的寶石」通常被認爲是Stack Overflow的主題。請參閱http://stackoverflow.com/help/on-topic第5項的「關閉主題」部分。如果你幸運的話,那些立即和輕鬆地知道答案的人可能會對此產生評論。我很抱歉我沒有 - 除非你只是指「如何編寫一個使用我的字段描述數據的表單模板」,在這種情況下,爲什麼不使用'haml'或'erb'? –

回答

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可以生成一類的行爲prettly很像ActiveRecord

+0

感謝Synapse。將嘗試以上解決方案,並讓你知道 –

+0

感謝Synapse。你的解決方案爲我工作。 我以稍微不同的方式實施 –

相關問題