当我尝试在模型中验证两个Datetime属性时,我得到以下结果:
nil的未定义方法`to_datetime':NilClass
它突出了我的功能
def validate_timings
if (startDate > endDate)
errors[:base] << "Start Time must be less than End Time"
end
end
特别是使用'&gt;'
我认为这可能是我处理日期的方式,但我不确定。这是日期的通过方式:
"startDate(1i)"=>"2013",
"startDate(2i)"=>"12",
"startDate(3i)"=>"18",
"startDate(4i)"=>"10",
"startDate(5i)"=>"24",
"endDate(1i)"=>"2013",
"endDate(2i)"=>"12",
"endDate(3i)"=>"18",
"endDate(4i)"=>"11",
"endDate(5i)"=>"24",
P.S我知道我的命名约定不正确,我会在下次迁移中更改它们。
更新:这是我的完整型号
class Appointment < ActiveRecord::Base
belongs_to :car
belongs_to :service
accepts_nested_attributes_for :service
accepts_nested_attributes_for :car
attr_accessor :period, :frequency, :commit_button
validates_presence_of :car_id, :service_id, :startDate, :endDate
validate :validate_timings
def validate_timings
p startDate, endDate
if (startDate > endDate)
errors[:base] << "Start Time must be less than End Time"
end
end
def update_appointments(appointments, appointment)
appointments.each do |e|
begin
st, et = e.startDate, e.endDate
e.attributes = appointment
nst = DateTime.parse("#{e.startDate.hour}:#{e.startDate.min}:#{e.startDate.sec}, #{st.day}-#{st.month}-#{st.year}")
net = DateTime.parse("#{e.end.hour}:#{e.end.min}:#{e.end.sec}, #{et.day}-#{et.month}-#{et.year}")
#puts "#{nst} ::::::::: #{net}"
rescue
nst = net = nil
end
if nst and net
# e.attributes = appointment
e.startDate, e.endDate = nst, net
e.save
end
end
end
end
答案 0 :(得分:1)
您的比较运算符是正确的。但是,当您在datetime对象上调用此运算符时,它会尝试将右侧对象转换为另一个datetime对象。
即:“Time.now&lt; nil”将返回: “NoMethodError:未定义的方法`to_datetime'代表nil:NilClass”而不是无效的日期错误。
因此,在您的情况下,您获得的错误意味着当您尝试比较它们时,您没有正确的日期时间 endDate 。
在您的模型对象有时间加载其endDate值之前,您似乎调用了验证方法。
答案 1 :(得分:0)