2010-07-03 42 views
3

這不是博客文章,這是一個問題!
說到類型我的意思是我們有類型值和類型描述。我們可以爲每種類型設置不同的類型(性別,大小,顏色等)和值集合。 我們有2種選擇:保持數據庫或應用程序中的類型。
對於我來說,保留整個表來存儲每種類型的值是多餘的。另一種方法是將類型存儲在帶有字段的單個表中:類型名稱,類型值,類型描述。 如果你想從應用程序修改它的值,保持db中的類型有用。但主要是當我添加新類型時,我正在改變應用程序行爲。
對我來說,更好的選擇是保持類型的應用程序。我有這樣一個YML配置文件(實際上它是SettingsLogic設置文件的一部分):你通常在軌道上保持類型?

types: 
    gender: "male female" 

做這樣我就可以驗證表單輸入:

validates_inclusion_of :gender, :in => Settings.types.gender.split(/\s/) 

至於我的應用程序是多語種我一直在描述本地化文件:

ru: 
    types: 
    gender: 
     male: "Мужской" 
     female: "Женский" 

準備爲選擇我用這個輔助方法,選擇一個集合:

def genders 
    genders = [] 
    Settings.types.gender.split(/\s/).each do |gender| 
    genders << [t("types.gender.#{gender}"), gender] 
    end 
    genders 
end 

這種方法的缺點是,我要保持在分貝長型值雄性女性代替足夠˚F
所以我現在想的哈希:

def genders 
    genders = [] 
    gender_types = { :m => "male", :f => "female" } 
    gender_types.each do |key, value| 
    genders << [t("types.gender.#{value}"), key] 
    end 
    genders 
end 

但是現在我沒有答案在保持哈希就像我在配置文件中的字符串做。正如我所提到的,這個哈希應該不僅可以從輔助方法訪問,也可以在驗證中訪問。

所以,問題是足夠寬:你如何保持類型?什麼是最好或更好的方法?

回答

3

我使用散列類似的東西:

class RealtyRequest < ActiveRecord::Base 
    TYPOLOGY = { 'One' => 1, 'Two' => 2, 'Three' => 3 } 

    def typology 
    TYPOLOGY.invert[typology_id] 
    end 
end 

模型是一個真正的表,我儲存的整數值,然後我得到一個方法字符串值。

當使用集合的選擇,你可以使用哈希:

<div class="field"> 
    <%= f.label :typology_id %><br /> 
    <%= f.select :typology_id, RealtyRequest::TYPOLOGY %> 
</div> 

歡呼聲,

一個。

+0

我喜歡你的解決方案。謝謝! – Voldy 2010-07-06 16:45:39

+0

我經常使用這種方法,因爲它很簡單,效果很好。很高興幫助你:-) – 2010-07-07 07:39:00