2016-04-25 51 views
2

我有MyModel它有屬性category。只有兩種可能的類別類別1類別2。屬性是使用形式如下分配:我應該如何在Rails中存儲屬性的集合?

<%= f.input :category, collection: category_options %>

什麼被認爲是「好習慣」,在Rails的。我應該將屬性保存爲數據庫中的字符串,還是應該爲集合創建新的表/參考?

將類別存儲爲字符串的好處是可以保持數據庫乾淨,但必須將這些數據集單獨存儲在控制器中。另外,因爲我使用的是i18n,所以我期望將該類別存儲爲字符串將導致翻譯問題。

回答

1

對於簡單的情況,我通常使用這樣的東西。你可以在UI選擇中使用內部字符串作爲鍵。

# View Code: 
# <%= form.select :role, MyModel.categories, prompt: '' -%> 

class MyModel < ActiveRecord::Base 

    validates :category, 
      presence: true, 
      inclusion: { 
       in: :categories, 
       allow_blank: true } 

    class << self 

    def categories 
     %w[hot warm cold] 
    end 

    end 


    def categories 
    self.class.categories 
    end 


end 
+0

很酷,謝謝。這是一個很好的建議。問題:爲什麼你還需要實例方法?班級方法是否足夠? – Matthias

2

如果根據業務邏輯你計劃有一定的屬性,方法或其他物品,您的各類業務,您應該創建Category另一種模式。在管理複雜性方面實現未來需求將不那麼困難。如果您100%確定不會再有關於類別的額外信息,則應該將其作爲一個屬性,並在代碼中添加一些驗證(例如,包含在category1,category2中)。

+0

你能提供一個例子嗎?不知道我完全理解(新手抱歉) – Matthias

+0

@Matthias例如,你的類別也有一些屬性。可能是'size'或'price_range'等等。如果您的類別是單獨的對象,則可以將它存儲在特定類別的每個對象中,而不是將它存儲一次。 –

+0

好吧,我明白了。這些類別沒有屬於自己的 – Matthias

相關問題