【发布时间】:2015-04-06 15:09:10
【问题描述】:
使用 ActiveRecord 模型,我知道您可以像这样验证输入字段的长度
class User
validates :user_name, length: { maximum: 20 }
end
但是,Rails 中的一种设计模式推荐使用瘦模型。如果你有大量的验证,上面的代码可能看起来很吓人。我读到还有另一种方法可以做到这一点。
您可以简单地使用ActiveRecord::Schema 来完成相同的任务。
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :user_name, limit: 20
end
end
end
这完成了完全相同的事情,只是您甚至不需要 Users 模型中的第二行。
关于这方面的标准 Rails 约定是什么?
【问题讨论】:
-
如果你想控制验证做
validates :user_name, length: { maximum: 20 },如果你让你的数据库控制你将输入100个字符并且你的数据库将截断它,而不是报告字符串超过20的错误字符。 -
有些人会争辩说你必须有瘦控制器和瘦模型。但是,这可以在您的应用程序中创建几个额外的类。有时,如果有文档并按逻辑布局,那么胖模型会更容易阅读。如果它使代码更易于阅读,我将忽略“最佳实践”,因为我可能并不总是唯一接触该代码的人。如果应用程序扩展到多个人将访问相同文件的程度,我将考虑在那时将其提取为重构。然而,这种情况很少发生。
标签: ruby-on-rails validation activerecord model convention