自定义Rails验证 - 同时存在多个字段

时间:2010-08-30 12:51:46

标签: ruby-on-rails validation

我想在Rails中创建自定义验证。我需要验证POST的start_date_time和end_date_time(一起)不会与数据库中的那个组合重叠。

示例:

在数据库中:

start_date
  05/15/2000
end_date
  05/30/2000

贴:

start_date
  05/10/2000
end_date
  05/20/2000
FAILS!

这就是问题:

1)我想将两个开始和结束字段发送到函数

2)我想获取两个 POSTed字段的值,以用于构建查询。

3)奖励:我想使用范围(比如说,对于给定的[:user_id,:event] - 但是,我希望再次传入。

如何获取字段的值?

假设我的函数看起来像这样:

def self.validates_datetime_not_overlapping(start, finish, scope_attr=[], conf={})
    config = {
        :message => 'some default message'
    }
    config.update(conf)

    # Now what?
end

我有点陷入困境。我已经搜过网了,无法搞清楚....我可以 但使用validate_each ...

并非同时同时

任何帮助都

谢谢:)

1 个答案:

答案 0 :(得分:3)

custom validation methods怎么办?

您可以添加:

validate :check_dates

def check_dates
  do.whatever.you.want.with.any.field
end

编辑:

所以也许validate_with

RoR指南的修改示例:

class Person < ActiveRecord::Base
  validates_with DatesValidator, :start => :your_start_date, :stop => :your_stop_date
end

class DatesValidator < ActiveRecord::Validator
  def validate
    start = record.send(options[:start])
    stop  = record.send(options[:stop])

    ...
  end
end