0

我需要添加自定义验证器来比较两个日期 - 开始日期和结束日期。 我创建自定义的验证client_side_validations中的自定义验证器

class MilestoneDatesValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    if record.start_date > record.end_date 
     record.errors.add(attribute, :end_date_less, options.merge(:value => value)) 
    end 
    end 
end 

我创建ClientSideValidations自定义的验证。我不知道我怎样才能得到它的另一个属性值,但我试图做这样的方式:

ClientSideValidations.validators.local['milestone_dates'] = function(element, options) { 
    start_date = new Date($('#milestone_start_date').val()); 
    end_date = new Date($('#milestone_end_date').val()); 
    if(end_date < start_date) { 
    return options.message; 
    } 
} 

但只需要刷新页面后不起作用/我有错误,但不客户端验证。我使用client_side_validations(3.2.0.beta.3),client_side_validations-formtastic(2.0.0.beta.3),rails(3.2.3)

回答

1

您上面提供的代码缺少任何提及的声明(并使用)验证器辅助方法。在milestone_dates_validator.rb初始化尝试添加在文件末尾以下:

module ActiveModel::Validations::HelperMethods 
    def validates_milestone_dates(*attr_names) 
    validates_with MilestoneDatesValidator, _merge_attributes(attr_names) 
    end 
end 

而且在模型调用验证的属性/ s的您要验证:

validates_milestone_dates :milestone_ends_at