我正在尝试编写一个自定义验证...人们在一个站点的开始和结束时间进入,我正在尝试编写验证以检查结束后是否在开始之后。我试图将它转换为Unix时间,但后来我得到了一个noMethodError。我想将开始时间和结束时间的符号传递给此方法,然后比较两者。
def validates_end_is_after_start(*attr_names)
start_hour = attr_names[0].to_i
end_hour = attr_names[1].to_i
问题是这最终会出现符号的noMethodError。但该符号指向DateTime对象(我认为),如何访问该对象?我认为对于一般的符号我有些不明白的地方。
答案 0 :(得分:2)
您可以使用可以访问类型转换日期的validate
方法
class Something < ActiveRecord::Base
validate :valid_dates
def valid_dates
if start_time >= end_time
self.errors.add :start_time, ' has to be after end time'
end
end
end
答案 1 :(得分:0)
将符号看作字符串,但作为对象的功能和行为要少得多。您应该将代码更改为以下内容:
def validates_end_is_after_start(*attr_names)
start_hour = self.send(attr_names[0].to_sym).to_i
end_hour = self.send(attr_names[1].to_sym).to_i
# ... more code here
end
你还应该检查出令人敬畏的宝石validates_timeliness,这是为了处理日期,时间和日期时间的验证。