Thursday, 15 May 2014

Remove orphaned key/value from rails store hash -



Remove orphaned key/value from rails store hash -

i'm using text column , rails' store record user preferences so:

class user store :prefs, accessors: [:dismiss_setup, :initiate_setup] after_initialize :set_defaults private def set_defaults self.dismiss_setup ||= false self.initiate_setup || = false end end

this, of course, looks this:

#<user id: 13, prefs: {"dismiss_setup"=>false, "initiate_setup"=>"false"} ...

during development have changed these accessors several times workflows improve. can't figure out how automatically purge them prefs hash. i'm ending lot of key/values deprecated this:

#<user id: 13, prefs: {"dismiss_setup"=>false, "initiate_setup"=>"false", "something_old"=>"true", "no_longer_used"=>"true"} ...

i want create changes in future without cluttering users table. there way compare prefs hash current store accessors , delete don't exist? or perhaps way @ problem?

here's came with:

class user store :prefs, accessors: [:dismiss_setup, :initiate_setup] after_initialize :clean_up, :set_defaults def array_of_prefs self.class.name.constantize.stored_attributes[:prefs] end private def clean_up = self.array_of_prefs.map &:to_s self.prefs.keep_if { |k,v| a.include? k } end def set_defaults self.dismiss_setup ||= false self.initiate_setup ||= false end end

as bonus, @user.array_of_prefs can merged in other strong parameters in users controller. keeps dynamic.

ruby-on-rails ruby-on-rails-4

No comments:

Post a Comment