我的自定义验证有问题。有individual_trainings表。
# Table name: individual_trainings
#
# id :integer not null, primary key
# date_of_training :date not null
# client_id :integer
# trainer_id :integer
# end_on :time not null
# training_cost_id :integer
# start_on :time not null
我想创建验证方法,检查客户端是否在同一天进行了另一次培训,时间start_on,end_on与另一次训练投掷错误重叠。
def client_individual_training_validation
client.individual_trainings_as_client.where('date_of_training = ?', date_of_training).each do |ci|
if (start_on...end_on).overlaps?(ci.start_on...ci.end_on)
errors.add(:error, 'You have a training in the same time.')
end
end
end
此方法存在问题,因为如果新的日期和时间正确(不重叠),则create方法会传递并在数据库中添加新的培训。但是还有一条警报错误消息,该术语已经很忙。如何解决?
答案 0 :(得分:2)
根据doc,错误应该类似于errors[: attribute]
或errors[:base]
。
由于没有属性名称error
,验证程序将忽略此行
errors.add(:error, 'You have a training in the same time.')
试试这个
errors.add(:base, 'You have a training in the same time.')
http://guides.rubyonrails.org/active_record_validations.html#errors