我有这个常量来保存所有日期字段:
DATE_FIELDS = [:a_effective_on, :a_expire_on,
:field_effective_on, :field_expire_on,
:line_manager_effective_on, :line_manager_expire_on,
:officer_effective_on, :officer_expire_on,
:regional_effective_on, :regional_expire_on]
我想循环一个对象并删除一个日期,如果它有一个值。
这有效吗?:
@copy_to.DATE_FIELDS.each do |_date|
# remove dates here
end
我收到nil class for id
错误。
答案 0 :(得分:0)
DATE_FIELDS.each do |field|
@copy_to.send("#{field}=".to_sym, nil) if @copy_to.send(field)
end
答案 1 :(得分:0)
当你在这个类中放入一个常量时,它就存在于类级别。如果您在课外,则使用YourClassName::DATE_FIELDS
访问它,如果您在课堂内,则只需DATE_FIELDS
。
我会这样做:
#instance method in your class
def clear_all_date_fields
atts = {}
DATE_FIELDS.each{|f| atts[f] = nil}
self.attributes = atts
end
现在你可以做到
@copy_to.clear_all_date_fields
请注意,这不会保存@copy_to。您可以在之后保存它,或者将保存放入方法中(尽管我认为最好不要自动保存)。