我有静态查找,用于填充表单字段以及验证属性。
我没有将它们存储在数据库中,因为它们是静态的,不会更改,核心应用程序逻辑是基于这些值的(不希望数据库值的更改破坏应用程序)。
# 15+ different categories...
APPLICANT_TYPES = ["primary", "coborrower"].freeze
# forms...
<%= f.select :applicant_type, APPLICANT_TYPES %>
# models...
class Applicant < ApplicationRecord
validates :applicant_type, inclusion: { in: APPLICANT_TYPES }
end
我有几个可行的选择,但我不确定哪一个是最传统的或可能会引起问题。对于这样的静态常量,Rails的约定是什么?
-
config/initializers/constants.rb
所有模型从继承的 -
ApplicationRecord
-
config/constants.yml
似乎不适合我,因为有额外的步骤来加载YAML到Ruby,所以为什么不去constants.rb
上面?
我有点困惑,因为它们中的任何一种都有效,但我肯定会有一些意想不到的副作用,我没有考虑到。
标准做法是在类(或模块)中定义与它们最相关的常量。在您的示例中,您将在Applicant
:
class Applicant < ApplicationRecord
APPLICANT_TYPES = ["primary", "coborrower"].freeze
end
然后当你使用它们时,通过那个类(或模块)引用它们:
<%= f.select :applicant_type, Applicant::APPLICANT_TYPES %>
这是一个非常普通的答案,但到目前为止它对我很有帮助!
还可以看看ActiveRecord::Enum,如果这是一个模式,帮助你。