class MigrateUserSettings < ActiveRecord::Migration def up old_settings = ConfigurableSetting.all old_settings.each do |old_setting| # get target (user) type = old_setting.configurable_type id = old_setting.configurable_id user = type.constantize.find(id) # get the data (settings) name = old_setting.name namespace = name.split('.')[0] key = name.split('.')[1].underscore # Camelcase to underscore # prepare value value = YAML.load(old_setting.value) value = value.nil? ? false : value # set the settings_attributes (thanks to settings.merge! we can set them one by one) user.settings_attributes = { "#{namespace}" => { "#{key}" => value } } # save the user to apply after_save callback user.save end end def down end end