2009-10-17 56 views
7

有誰知道允許用戶添加字段到模型的寶石或好的實現?用戶在Rails中指定的動態模型字段

Ex。

用戶想要將「內部註釋」字段添加到聯繫人模型中。在接口方面,他們乾脆就選擇「新領域」>「類型:文本」

感謝

回答

6

對不起,我不知道任何插件來做到這一點。但我有一個實施建議。

這個想法是添加一個「DynamicField」模型,該模型與Contact模型有has_many關係。 如果在聯繫人模型中缺少方法,則檢查是否有動態字段來檢索它,如果是這種情況。

class DynamicField < ActiveRecord::Base 
    belongs_to :contact 
end 


class Contact < ActiveRecord::Base 
    has_many :dynamic_fields 

    def method_missing(sym, *args, &block) 
     begin 
      super 
     rescue 
      field = dynamic_fields.find_by_name(sym) 
     end 
     raise ActiveRecord::NoMethodError if field.nil? 
     field.value 
    end 
end 

您將需要添加一個正則表達式,如果你想與屬性=方法添加虛擬屬性(檢測的「=」的存在,做一個更新,而不是隻得到的值)。 但你已經有了這個想法。

當方法不存在時,我們檢查動態字段是否有相同的名稱。 如果沒有(field.nil?),我們引發一個NoMethodError。否則,我們將其退回。

所以,你可以出現以下所有字段的列表:

Contact.find(:first).dynamic_fields 

和檢索特定的一個具有以下內容:

Contact.find(:first).my_dynamic_field 
2

這裏做的另一種方式。

免責聲明:此方法不建議,因爲它可能會被濫用。實際上,它應該只適用於您網站的管理員。

class MyModel < ActiveRecord::Base 
    ... 
    def self.add_column(name, type, args= {}) 
    ActiveRecord::Migration.add_column table_name, name, type, args 
    end 
end