Is there a clean API for resetting instance variables on 'reload' in ActiveRecord?

前端 未结 3 709
陌清茗
陌清茗 2021-01-07 22:23

In an ActiveRecord::Base model, I can reset the state of the model to what it was when I got it from the database with reload, as long as the attri

3条回答
  •  南方客
    南方客 (楼主)
    2021-01-07 23:08

    Rework Jean-Do's answer slightly. It doesn't break default instance_variables and relations.

    after_initialize do 
      @default_instance_variables = instance_variables
    end
    
    def reload(options = nil)
      super
      self.instance_variables.each do |ivar|
        if ivar == :'@default_instance_variables' || 
          @default_instance_variables.include?(ivar)
          next 
        end
        remove_instance_variable(ivar)
      end
      self
    end
    

提交回复
热议问题