我应该如何在 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% 确定不会再有关于类别的额外内容,您应该在代码中添加一些验证使其成为一个属性(例如包含在 category1
、category2
中)。
我有 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% 确定不会再有关于类别的额外内容,您应该在代码中添加一些验证使其成为一个属性(例如包含在 category1
、category2
中)。