我应该验证类型列吗? (铁路,STI)

问题描述 投票:0回答:2

我有一个模型,正在使用Single Table Inheritance。这在我的数据库中有一个type列,其中填充了类名称的字符串。

我应该验证此列吗?

选项:

  • 数据库中的必填列
  • validates :type, presence: true
  • validates :type, inclusion: {in: [Class1.to_s, Class2.to_s]}
ruby-on-rails ruby-on-rails-5 activemodel single-table-inheritance sti
2个回答
2
投票

由于ActiveRecord处理了type字段,因此您无需在该字段上编写额外的验证。


1
投票

我同意不需要这些验证。

仅作详细说明,验证处理来自表单的人工输入。它们的存在是为了解决一个特定的问题,那就是确保用户输入的数据符合可接受的格式。

  • 如果该表是由您的Rails应用程序创建的,则无需验证数据库中是否有任何列。迁移就放在这里,如果有人从您的数据库中删除列,那么与验证用户输入相比,您遇到的问题更大。
  • 无需验证类型字段的存在,如果为空,则将使用实例化的类自动填充它。例如。 Parent.new将使用“父母”填充它]
  • [验证包含性可能会有一些价值,但是很少可能输入无效的类型。如果您的用户必须在表单中输入类的名称,则可能有一些非常麻烦的表单设计。而是采用以下两种方法之一:
    • 包含有效类型的选择。
    • 每种子类型的单独控制器。毕竟,如果它们有很大不同,您可能希望它们的表单,显示页面和索引页面看起来有所不同。如果它们之间没有显着差异,则您可能不想使用单表继承。

((使用这些方法中的任何一种,都不需要验证类型列)

希望这会有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.