Ruby on rails Rails中的验证

Ruby on rails Rails中的验证,ruby-on-rails,ruby,Ruby On Rails,Ruby,我设计了一个非常简单的web应用程序,它将作者、书籍和评级联系起来 在各个模型中 Author has_many :books Book belongs_to :author has_many :reviews Review belongs_to :book 模型属性 Author : title, fname, lname, DOB Book : ISBN, title, publish_date, pages Review : rating(1-5), description 我想

我设计了一个非常简单的web应用程序,它将作者、书籍和评级联系起来

在各个模型中

Author
has_many :books

Book
belongs_to :author
has_many :reviews

Review
belongs_to :book
模型属性

Author : title, fname, lname, DOB
Book : ISBN,  title, publish_date, pages
Review : rating(1-5), description
我想知道我是否完全验证了模型中我喜欢的所有属性,例如1个属性

validates :ISBN, :only_integer => true, length: { is: 13 }
我需要担心其他地方数据的验证吗


我知道模型的验证在服务器端运行,因此在JS中可能需要在客户端进行一些验证。我试图确保在断言数据正确性时没有任何缺陷。

通常情况下,这取决于具体情况

在一个简单的Rails应用程序中,所有模型都将通过向控制器发出的视图请求进行更新,控制器将参数填充到模型中,然后尝试保存模型,出现的任何验证错误都会呈现回服务器。 在这种情况下,您的代码所要做的就是对失败的保存调用做出反应,但您可以睡得很香,因为您知道数据库中的所有内容都应该是这样的

在更复杂的应用程序中,将所有验证逻辑放入模型可能不再有效:每次save调用都必须运行所有验证逻辑,这会减慢速度,并且应用程序的不同部分可能对输入参数有不同的要求

在这种情况下,有很多方法可以做到这一点。带有特定于它们所表示的表单的验证的表单对象是一种非常常见的解决方案。然后,这些表单模型将其输入分布在一个或多个底层ActiveRecord模型中


但是Rails的方法是一步一个脚印,避免过早的优化。在可预见的未来,将您的验证放入您的模型将足以保证一致性。

通常情况下,这取决于

在一个简单的Rails应用程序中,所有模型都将通过向控制器发出的视图请求进行更新,控制器将参数填充到模型中,然后尝试保存模型,出现的任何验证错误都会呈现回服务器。 在这种情况下,您的代码所要做的就是对失败的保存调用做出反应,但您可以睡得很香,因为您知道数据库中的所有内容都应该是这样的

在更复杂的应用程序中,将所有验证逻辑放入模型可能不再有效:每次save调用都必须运行所有验证逻辑,这会减慢速度,并且应用程序的不同部分可能对输入参数有不同的要求

在这种情况下,有很多方法可以做到这一点。带有特定于它们所表示的表单的验证的表单对象是一种非常常见的解决方案。然后,这些表单模型将其输入分布在一个或多个底层ActiveRecord模型中

但是Rails的方法是一步一个脚印,避免过早的优化。在可预见的未来,将验证放入模型中就足以保证一致性

我需要担心其他地方数据的验证吗

是的,你知道。 应用程序级验证是必需的

对于应该是唯一的事物,例如ISBN编号,如果要保证唯一性,数据库约束是至关重要的。这可能导致问题的其他方面是当您对关联计数有限制时

虽然验证可以防止大多数错误,但它们不能替代数据库约束以确保数据的正确性。如果正确性很重要,这两者都是必需的

我需要担心其他地方数据的验证吗

是的,你知道。 应用程序级验证是必需的

对于应该是唯一的事物,例如ISBN编号,如果要保证唯一性,数据库约束是至关重要的。这可能导致问题的其他方面是当您对关联计数有限制时


虽然验证可以防止大多数错误,但它们不能替代数据库约束以确保数据的正确性。如果正确性很重要,这两种方法都是必需的。

您还想在哪里验证它们?它们必须在模型中有效才能保存到数据库。您可以对数据库进行多种验证类型、大小、存在性、允许值、,等等。但不清楚除了重复工作之外,这能为您带来什么。@dbugger它能为您提供一个实际的保证,即插入的数据不能违反约束。@max true-只需决定是否值得为特定的应用程序甚至模型付出努力,您还能在哪里验证它们?它们必须在模型中有效才能保存到数据库。您可以对数据库进行多种验证类型、大小、存在性、允许值等约束,但不清楚这会给您带来什么,除了重复工作。@dbugger它会给您带来一个实际的保证,即插入的数据不会违反约束。@max true-只需决定它是否值得
为特定应用程序甚至模型所做的努力感谢您的回复,我认为因为web应用程序相对较小,不会部署到任何地方,所以我不必担心。然而,当我必须将项目部署到web上时,我一定会记住这些注意事项。毕竟,这就是我们进行测试的原因:感谢您的回复,我认为因为web应用程序相对较小,不会部署到任何地方,所以我不必担心。然而,当我必须将项目部署到web上时,我一定会记住这些注意事项。毕竟,这就是我们进行测试的原因:是的,正如我所看到的,这也是一个重要的注意事项。非常感谢您的提醒。另一件需要记住的事情是,当数据通过Rails插入时,您的验证只会强制执行正确性-如果您使用导入脚本之类的东西,您仍然可能最终得到无效数据。是的,正如我所见,这也是一个重要的注意事项。非常感谢您的提醒。另一件需要记住的事情是,当数据通过Rails插入时,您的验证只是强制执行正确性——如果您使用导入脚本之类的东西,您仍然可能最终得到无效数据。