我想在创建新记录时向用户提供当前日期,并且我想允许他编辑提供的日期。例如,我编写了一个错误跟踪系统,我有一个date_of_detection
字段。如果它是当前日期,99%的时间是好的,但是为了1%,应该允许用户编辑它并设置任何更早的日期。
我对任何黑客都很感兴趣,但最后我想有一个很好的方法去做。
答案 0 :(得分:2)
除了斯洛博丹的answer之外,如果你最终在很多地方做这件事,并且只想在一个地方做这件事,你可以这样做:
class Bug < ActiveRecord::Base
def initialize
attributes = {:date_of_detection => Date.today}
super attributes
end
end
>> Bug.new.date_of_detection
=> Thu, 12 Aug 2010
答案 1 :(得分:2)
虽然不建议使用Swanands解决方案来覆盖activerecord对象的初始化,但可能会导致一些难以发现的错误。
after_initialize回调仅用于此目的。
class Bug < ActiveRecord::Base
def after_initialize
self.date_of_detection = Date.today if self.date_of_detection.nil?
end
end
答案 2 :(得分:1)
在控制器中创建新错误时,只需设置date_of_detection的值即可。类似的东西:
@bug = Bug.new(:date_of_detection => Date.today)
# or something like this
@bug = Bug.new
@bug.date_of_detection = Date.today