Skip to Content Skip to Search
Methods
A
C
D
S
T
Included Modules

Constants

JSON_ENCODER = ActiveSupport::JSON::Encoding.json_encoder.new(escape: false)
 

Instance Public methods

accessor()

# File activerecord/lib/active_record/type/json.rb, line 38
def accessor
  ActiveRecord::Store::StringKeyedHashAccessor
end

changed_in_place?(raw_old_value, new_value)

# File activerecord/lib/active_record/type/json.rb, line 34
def changed_in_place?(raw_old_value, new_value)
  deserialize(raw_old_value) != new_value
end

deserialize(value)

# File activerecord/lib/active_record/type/json.rb, line 14
def deserialize(value)
  return value unless value.is_a?(::String)
  begin
    ActiveSupport::JSON.decode(value)
  rescue JSON::ParserError => e
    # NOTE: This may hide json with duplicate keys. We don't really want to just ignore it
    # but it's the best we can do in order to still allow updating columns that somehow already
    # contain invalid json from some other source.
    # See https://github.com/rails/rails/pull/55536
    ActiveSupport.error_reporter.report(e, source: "application.active_record")
    nil
  end
end

serialize(value)

# File activerecord/lib/active_record/type/json.rb, line 30
def serialize(value)
  JSON_ENCODER.encode(value) unless value.nil?
end

type()

# File activerecord/lib/active_record/type/json.rb, line 10
def type
  :json
end