我应该验证类型列吗? (Rails, 性病)

Should I validate the type column? (Rails, STI)

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

我应该验证此列吗?

选项:

由于 ActiveRecord 处理 type 字段,您不需要在此字段上编写额外的验证。

我同意 none 这些验证是必需的。

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

  • 如果 table 是由您的 Rails 应用程序创建的,则无需验证数据库中是否存在任何列。迁移把它放在那里,如果人们从你的数据库中删除列,你会遇到比验证用户输入更大的问题。
  • 不需要验证类型字段的存在,如果它是空的,它将自动填充实例化的 class。例如。 Parent.new 将用“Parent”填充它
  • 验证包含可能有一些价值,但输入无效类型的情况非常罕见。如果您的用户必须在表单中输入 class 的名称,则说明表单设计有些可疑。而是采用以下两种方法之一:
    • 包含有效类型的 select。
    • 每个子类型的单独控制器。毕竟,如果它们明显不同,您可能希望它们的表单、显示页面和索引页面看起来不同。如果它们没有显着差异,您可能不想使用单一 table 继承。

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

希望对您有所帮助:)