我应该如何在 Rails 中存储属性的集合?

How should I store a collection for an attribute in Rails?

我有 MyModel 具有属性 category。只有两个可能的类别 类别 1类别 2。使用如下形式分配属性:

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

在 Rails 中被认为是 "good practice"。我应该将属性作为字符串保存在数据库中,还是应该为集合创建一个新的 table / 引用?

将类别存储为字符串的好处是可以保持数据库清洁,但必须将集合单独存储在控制器中。另外,由于我使用的是 i18n,我希望将类别存储为字符串会导致翻译问题。

对于简单的情况,我通常使用这样的东西。您可以 i18n 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

如果根据业务逻辑,您计划为每个类别设置一些属性、方法或其他内容,您应该为 Category 创建另一个模型。在管理复杂性方面实现您未来的需求会更容易。如果您 100% 确定不会再有关于类别的额外内容,您应该在代码中添加一些验证使其成为一个属性(例如包含在 category1category2 中)。