2011-10-29 90 views
0

我使用Rails 3.0.3,我有相当广泛的验证过程。导轨:验证与参数

我想要在我检查验证,如果某个变量是合适的日期

基本上这就是我想要做的是:

def validate_date(this_date)? 

    begin 
     Date.parse(this_date) 
    rescue 
     proper_date = false 
    else 
      proper_date = true 
    end 
end 

,并使用调用此方法在我的模型:

attr_accessor :given_date  
validate_date(given_date) 

而且在使用例如在我的验证文件另一个地方:

或类似的东西...

我需要做什么才能做到这一点?

回答

1

你应该做的是类似于NKM的回答了一句:

validates :name, 
    presence => true # or other standard validations 
validate :valid_my_date_variable 

def valid_my_date_variable 
    if my_date_variable.present? 
    errors[:my_date_variable] << "is not valid" unless valid_date(my_date_variable) 
    end 
end 

def validate_date(this_date)? 
    begin 
    Date.parse(this_date) 
    rescue 
    proper_date = false 
    else 
    proper_date = true 
    end 
end 

或者你可以为你的约会创建验证和使用标准验证使用它。

参考documentation如何,如果你喜欢保持你的模型清洁创建自定义的验证。

+0

感谢。有你的代码,但我的一些小错误可以修复它,这种方法的作品! – Christoffer

3

要添加而不是返回false错误,所以不是你想使用:

errors.add(:date, "is invalid") 
+0

谢谢,我其实已经做到了。但它并没有真正解决我的问题的核心。我应该如何使用参数来调用这个函数。 – Christoffer

0

假设this_date是我们需要验证的属性(列),我们可以做到以下几点,

validate :validate_date 

    def validate_date 
    begin 
     Date.parse(this_date) 
    rescue 
     errors.add(:this_date, "is not valid") 
    end 
    end 

参考:http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-symbol-with-if-and-unless

+0

我不太确定。这将使名称的存在被验证IN CASE日期被验证。如果验证日期返回false,则它不会验证名称。它不会影响错误是否会被公开(除非结合使用可能与尼克拉斯答案)。 Alos,调用方法使用:validate_date(this_date)?似乎没有工作。我得到这个错误:语法错误,意外“(”,希望keyword_end ... =>真,如果=>:?validate_date(given_date) – Christoffer

+0

对不起,我错误地理解您的查询更新了上面的代码... – nkm

0

我的看法是,你不应该这样做摆在首位。验证发生在模型的属性上,而不是针对验证方法的任何输入参数。 执行以下操作:

def validate_date 

    begin 
    Date.parse(this_date) 
    rescue 
    errors[:date_attribute] << 'is invalid date' 
    end 
end 

上面这段代码假设你有你的Model属性date_attribute。相应地改变。

+0

谢谢,但由于我的应用程序的安装,我有我的所有验证在一个文件中(这是必要的),我需要使用的输入参数,所以这是不行的... – Christoffer