2016-04-25 49 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

相关问题