我的模型使用了太多自定义验证。
我不知道以这种方式使用自定义验证是一件好事吗?
class Lesson
validates :start_time, presence: true
validates :end_time, presence: true
# other validates use rails builtin
validate :time_range_not_overlap_with_lessons_of_same_class
validate :time_range_not_overlap_with_lessons_of_same_teacher
validate :time_range_not_overlap_with_awj_lessons_of_same_teacher
validate :is_conflict_with_students_cls_lessons
validate :not_conflict_with_awj_lessons_of_students
end
我的自定义验证(如time_range_not_overlap_with_lessons_of_same_teacher
)将触发数据库查询。
所以我想知道这是一种正确的方法来进行这些验证吗?
如果不是,我应该创建一个validate_params
方法来替换那些自定义验证,并在每次保存记录之前调用,如下面的代码,还是有更好的方法来做到这一点?
def validate_params
time_range_not_overlap_with_lessons_of_same_class
# other codes here
end
if lesson.validate_params
if lesson.save
#do something
else
#other logic here
end
end
答案 0 :(得分:0)
我相信当你需要验证Active Model提供的那些内置验证器时,自定义验证并不是一个坏主意。
实现这一目标的一种简洁方法是将所有自定义验证程序提取到继承自ActiveModel::Validator
的单独验证程序类。
参考:http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations
class MyValidator < ActiveModel::Validator
def validate(record)
#your validations
end
end
#custom validator added to your model
class Lesson < ActiveRecord::Base
include ActiveModel::Validations
validates_with MyValidator
end