Ruby on rails 模型验证是否应该反映数据库列约束
我有下表:Ruby on rails 模型验证是否应该反映数据库列约束,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有下表: class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.belongs_to :site, null: false t.bigint :post_id, null: false t.string :title, null: false t.string :url, null: false
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts do |t|
t.belongs_to :site, null: false
t.bigint :post_id, null: false
t.string :title, null: false
t.string :url, null: false
t.text :body, null: false
t.timestamps
end
end
end
class CreatePosts
您可以看到,任何属性都不能有值null
。我应该在Post
模型中反映这些约束吗?这是一种好的做法吗
现在,如果我试图保存一篇没有所有属性的文章,ActiveRecord将引发一个MySQL错误,我想避免这个错误,并给出一个更简洁的错误。让我先看看这篇文章中巨型机器人与其他巨型机器人的碰撞: 在这篇文章中,德里克·普赖尔(Derek Prior)提出,几乎没有必要同时做这两件事: 不必使用模式约束来支持每个验证,也不必将模式约束反映为模型验证。当您决定哪一个适合您的用例时,有几个问题值得问
我建议阅读整篇文章(我已经读过了,并且发现自己每隔几个月就会回来读一次)。博客文章中更相关的部分是下一节,他们讨论了用户可以编辑的内容和不能编辑的内容之间的区别,第一类值的问题应该有验证(和数据库约束)因为它们的问题是用户错误,所以第二类值没有验证(但有数据库约束),因为存在应用程序错误。