我一直都会收到此错误
#<NoMethodError: undefined method `hours' for "1":String>
更新:我收到的错误不仅仅是“1”
这是我几小时回来的代码。我正在使用这种方法
def check_hours(most_recent_snooze)
if most_recent_snooze.duration.nil?
return 0.hours
else
return most_recent_snooze.duration.hours
end
end
这些代码使用check_hours(most_recent_snooze)方法
def snoozing?
if most_recent_snooze = Snooze.find_by_sensor_id(self.id)
if most_recent_snooze && !(most_recent_snooze.created_at + check_hours(most_recent_snooze) < Time.now)
# snooze is active
return true
else
most_recent_snooze.destroy
return false
end
end
return false
#self.snoozes.active.present? ? true : false
end
def snooze_minutes_remaining
# (60 - (Time.now - self.snoozes.last.created_at)/60).to_i + 1
most_recent_snooze = Snooze.find_by_sensor_id(self.id)
distance_of_time_in_words(Time.now, most_recent_snooze.created_at + check_hours(most_recent_snooze)) if most_recent_snooze
end
请告诉我这段代码出错的地方?
更新: 在schema.rb里面,duration是整数
create_table“snoozes”,:force =&gt;真的做| t |
.......
........
.........
t.integer“duration”
端
答案 0 :(得分:2)
ActiveSupport的时间方法只能应用于Fixnums,而且您传入的某些数据似乎是一个字符串。也许您的数据库列格式不正确?
处理此问题的一个好方法是在方法中使用明确的to_i
转换:
def check_hours(most_recent_snooze)
most_recent_snooze.duration.to_i.hours
end
nil.to_i
返回0
,因此在这种情况下您不需要使用nil检查。
答案 1 :(得分:0)
你的most_recent_snooze的持续时间,由于某种原因是一个字符串。如果您无法解决此问题,请在check_hours
:
def check_hours(most_recent_snooze)
if most_recent_snooze.duration.nil?
return 0.hours
else
return most_recent_snooze.duration.to_i.hours
end
end