当我尝试在模型中验证两个Datetime属性时,出现以下错误:
它突出显示了我的函数。undefined method `to_datetime' for nil:NilClass
def validate_timings
if (startDate > endDate)
errors[:base] << "Start Time must be less than End Time"
end
end
特别是使用'>'的情况。
我认为问题可能出在我处理日期的方式上,但我不确定。日期是这样传递的:
"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",
附言:我知道我的命名约定不正确,我将在下一次迁移中更改它们。
更新:这是我的完整模型。
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
startDate
或endDate
不能为nil
吗? - tessistartDate
或endDate
中的一个为空。可能是endDate
,并且某些内容正在尝试将其从nil
强制转换为比较。为了对此进行粗略的调试验证,请在方法顶部添加p startDate, endDate
。 - Neil SlaterendDate
是nil
,没有to_datetime
方法,你需要调试一下,找出endDate
变成nil
的原因。 - Малъ Скрылевъ