class ActiveAdmin::ResourceDSL

Public Instance Methods

json_editor() click to toggle source
# File lib/activeadmin/resource_dsl.rb, line 5
def json_editor
  before_save do |object, _args|
    object.class.columns_hash.select { |_key, attr| attr.type.in? [:json, :jsonb] }.keys.each do |key|
      next unless params[resource_request_name].key? key
      json_data = params[resource_request_name][key]
      data = if json_data == 'null' || json_data.blank?
               {}
             else
               JSON.parse(json_data)
      end
      object.attributes = { key => data }
    end
    object.nested_attributes_options.keys.each {|_nested_key|
      nested_attributes_with_index = params[resource_request_name]["#{_nested_key}_attributes"]
      next if nested_attributes_with_index.nil?
      nested_klass = _nested_key.to_s.singularize.camelize.constantize
      nested_klass.columns_hash.select { |_key, attr| attr.type.in? [:json, :jsonb] }.keys.each do |key|
        nested_attributes_with_index.each {|_index, nested_attributes|
          next unless nested_attributes.key? key
          json_data = nested_attributes[key]
          data = if json_data == 'null' || json_data.blank?
                   {}
                 else
                   JSON.parse(json_data)
          end
          object.send(_nested_key).each {|nested_object|
            nested_object.attributes = { key => data }
          }
        }
      end
    }
  end
end