Rails 表单批量编辑验证

Rails Form bulk edit validation

提问人:Suganya Selvarajan 提问时间:10/9/2023 更新时间:10/9/2023 访问量:13

问:

我的 Rails 应用程序中有一个学年的批量创建表单。我需要在此批量表单上实现验证。基本验证工作正常。我有一个自定义验证,可以检查学年是否相互重叠。

例如,第一学年的持续时间是 2022 年 9 月 1 日至 2023 年 8 月 31 日。因此,在此期间不能有另一个学年,或者在第一学年期间不能重叠。

  class CustomValidator < ActiveModel::Validator
    def validate(record)
      return if overlapping_siblings(record).empty?

      record.errors.add(options[:error_attribute], :overlapping_dates)
 end

 private

  def overlapping_siblings(record)
    scope = options[:scope] || -> { record.class.all }

   scope
    .call(record)
    .where.not(id: record.id)
    .where("? >= started_at AND ended_at >= ?", record.ended_at, 
    record.started_at)
  end
end

此验证器适用于创建单个对象。但对于批量形式,这不起作用(这是意料之中的)。因为,如果批量表格试图创建具有重叠日期的 2 个学年,因为它们仍然不在数据库中,因此它们不会相互验证,因此不会捕获重叠错误。

在批量表单上实现重叠日期验证的正确方法是什么?

Ruby-on-Rails 验证 批量 重叠

评论


答: 暂无答案