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



>我有一个模型,我正在使用单表继承。这在我的数据库中有一个type列,其中填充了类名的字符串。

我应该验证此列吗?

选项:

  • 数据库中的必填列
  • validates :type, presence: true
  • validates :type, inclusion: {in: [Class1.to_s, Class2.to_s]}

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

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

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

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

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

希望这对:)有所帮助

最新更新