在rails 3.1中,我们可以通过以下方式验证模型中字段的存在:
validates :name, :presence => true
在db迁移文件中,我们也可以
t.string :name, :null => false
似乎验证在保存之前检查数据完整性哪个更好。但是,db检查仅在保存过程中发生,可能在中止之前已开始实际保存。模型中的验证更好吗?非常感谢。
答案 0 :(得分:1)
在模型中编写验证通常是一种很好的做法,因为它可以更好地维护,可以在需要时轻松更改,并且在一个位置进行所有核心登录都很好。
当你只在db级别编写这样的东西时,编写测试用例会成为一个问题,当你回到以后的时候,你可能没有意识到你已经在db级别编写了这样的“逻辑”。
实际上,我甚至在模型上写下了我的“默认”值(尽管可以对此进行辩论)。原因是拥有默认选项是业务登录,因此需要进入模型级别。
由于上述原因,在模型级别编写此类代码是一种很好的做法。
答案 1 :(得分:0)
这是一个老问题,但是我今天偶然发现了这个问题,我认为答案是相同的,无论您使用的是Rails 3.1还是Rails 6:这取决于。
数据库约束和模型验证都存在是有原因的。除了这两个之外,我认为还值得考虑客户端检查适合的位置。
我的简短答案是:
与大多数事情一样,在学习时请遵循这些简单的规则,不会出错。稍后,一旦知道为什么要违反这些规则,便可以开始违反这些规则。
我在post on my blog中写下了更长的答案(“取决于情况”)(以及上述规则的原因)。