我想知道我是否错过了一种方法来避免在我的Sequel :: Model#validate子类方法中重复验证代码,因为我已经将所有约束放入我的迁移文件中。
这是我正在谈论的一个简单例子:
Sequel.migration do
change do
create_table :users do
primary_key :id
String :name, :null => false, :unique => true
end
end
end
class User < Sequel::Model
def validate
super
validates_presence :name
validates_unique :name
validates_type String :name
end
end
看起来非常痛苦并且容易出错,必须重复验证方法中的所有约束。我错过了什么或者别无他法吗?
任何建议都将不胜感激,谢谢
答案 0 :(得分:1)
续集有一些不错的plugins and extensions。
Sequel::Model.plugin(:auto_validations)
Sequel::Model.plugin(:constraint_validations)
和
DB.extension(:constraint_validations)
auto_validations插件会自动设置三种类型 模型列的验证:
- 所有列的类型验证
- NOT NULL列上的not_null验证(可选,存在 验证)
- 对具有唯一索引的列或列集进行唯一验证
请参阅http://sequel.jeremyevans.net/rdoc-plugins/classes/Sequel/Plugins/AutoValidations.html
constraint_validations扩展程序旨在轻松创建 create_table和alter_table块中的数据库约束。它 还将有关约束的相关元数据添加到单独的表中, constraint_validations模型插件用于设置自动 验证
参见http://sequel.jeremyevans.net/rdoc-plugins/files/lib/sequel/extensions/constraint_validations_rb.html 和 http://sequel.jeremyevans.net/rdoc-plugins/classes/Sequel/Plugins/ConstraintValidations.html
Sequel::Model.plugin(:auto_validations)
Sequel::Model.plugin(:constraint_validations)
Sequel.migration do
up do
extension(:constraint_validations)
create_table :users do
primary_key :id
String :name, :null => false, :unique => true
validate do
presence :name,
name: :presence_name
end
end
end
down do
extension(:constraint_validations)
drop_table(:users)
end
end
class User < Sequel::Model
end
答案 1 :(得分:0)
我认为,这是正常的。别担心。