检查表格的时间重叠

时间:2016-06-16 12:20:20

标签: ruby-on-rails ruby

我的自定义验证有问题。有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方法会传递并在数据库中添加新的培训。但是还有一条警报错误消息,该术语已经很忙。如何解决?

1 个答案:

答案 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