我正在尝试在范围内使用 DateTime.parse 将字符串转换为时间,但是出现未定义的局部变量错误。
是否可以在范围内转换字段,还是我需要尝试其他方法?
我的范围:
scope :time_range, lambda {
a = DateTime.parse(start_time_am)
where("#{a} <= ?", Time.now.strftime('%H'))
}
- 更新 -
在玩过这个之后,我发现我可能应该覆盖默认访问器。我现在有以下内容:
def start_time_am
read_attribute(:start_time_am).strftime("%H%M").to_i
end
在控制台中,我的 start_time_am 字段现在看起来像:
Promotion.last.start_time_am
=> 430
但是,如果我想暂时定义一个新字段,那么我仍然可以使用初始字段。
我可以在控制台中访问它,但在搜索时不能。例如。
def start_time_new
read_attribute(:start_time_am).strftime("%H%M").to_i
end
def self.time_range
time = Time.now.strftime('%H%M').to_i
where("start_time_new <= ?", time)
end
给出一个未知的列错误。我以为 attr_reader 会解决,但它不起作用。
谢谢