Ruby on Rails:在模型或数据库中验证是否更好?

Wil*_*nes 39 database validation ruby-on-rails models

通常更好的做法(以及为什么)验证模型或数据库定义中的属性?

对于(一个微不足道的)例子:

在用户模型中:

validates_presence_of :name
Run Code Online (Sandbox Code Playgroud)

与迁移相比:

t.string :name, :null => false 
Run Code Online (Sandbox Code Playgroud)

一方面,将其包含在数据库中似乎更能​​保证不会出现任何类型的坏数据.另一方面,将其包含在模型中会使事情更加透明,更易于理解,方法是将其分组到代码中.其余的验证.我也考虑过两者兼顾,但这似乎既不干,也不易维护.

ase*_*eem 47

我强烈建议在两个地方都这样做.在模型中执行此操作可以为您保存一个数据库查询(可能在整个网络中),该数据库查询基本上会出错,并且在数据库中执

  • 我同意在两个地方验证约束(我使用PostgreSQL和sexy_pg_constraints http://github.com/maxim/sexy_pg_constraints插件),但验证你的in模型将保存数据库查询并不完全正确.例如,`validates_uniqueness_of`必须进行数据库查询. (4认同)

小智 12

并且

validates_presence_of :name
Run Code Online (Sandbox Code Playgroud)

不一样的

t.string :name, :null => false 
Run Code Online (Sandbox Code Playgroud)

如果只在数据库中设置NOT NULL列,则仍可以插入空值("").如果您使用的是模型validates_presence_of - 则不能.


Aur*_*ril 5

两者都做是很好的做法。模型验证是用户友好的,而数据库验证添加了一个最后的组件,它可以强化您的代码并揭示应用程序逻辑中缺失的验证。