循环遍历对象并消隐字段

时间:2015-06-26 08:34:06

标签: ruby-on-rails

我有这个常量来保存所有日期字段:

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错误。

2 个答案:

答案 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。您可以在之后保存它,或者将保存放入方法中(尽管我认为最好不要自动保存)。