我有一些下拉字段,其中有2个,4个,10个和50个选项。这是has_one和belongs_to关系。我也有很多关系。
目前,我正在使用带有CONSTANT的模块来填充我的下拉列表。
SOFTWARE = [ "Windows, "OSX", "iOS", "Word", "Excel"]
我将值存储为字符串,或者如果它是has_many类型的关系,我将其存储为Postgres数组。
我被告知我应该使用相关表,其中belongs_to和has_one关系用于数据完整性和扩展。
使用相关表如何帮助缩放和数据完整性?您何时会建议使用常数以及何时使用相关表格?
这取决于您的选择。我已经完成了使用内置数组检查类型验证的情况。例如,
CITIES = ['Toronto', 'Vancouver', 'New York'].freeze
validates :city, presence: true, inclusion: { in: CITIES }
当你意识到你的枚举类型有任何其他额外的细节时,我会使用一个表。在这种情况下,我不会在这种情况下使用表格。
你可以做的是使用Postgres枚举。他们可以利用并帮助保持数据的一致性。 Rails也有一些关于这方面的文档。
https://edgeguides.rubyonrails.org/active_record_postgresql.html#enumerated-types
如果您的下拉值超过5或者某个时候可能会在下拉列表中添加新值,则最好使用related tables
。此外,如果可能有changes
到下拉值,使frequently
然后很容易在related table
。
has_one
- 一个带有下拉值的表和主表many_to_many
中的引用列 - 一个带有下拉值的表。中间表,它指的是下拉表和主表。 'https://guides.rubyonrails.org/association_basics.html'
Constants/enum
-如果下拉值较小,例如:性别(“男性”,“女性”,“其他”)在这种情况下可以使用enum
,因为在任何情况下都不会将新值添加到下拉列表中。 'https://api.rubyonrails.org/v5.2.2/classes/ActiveRecord/Enum.html'