Rails Activerecord:读取为字符串的 jsonb 属性
Rails Activerecord: jsonb attributes readed as string
我正在我的数据库中保存一些图片出口。该列是 jsonb 数据类型。
为了保存 exif,我使用了 carrierwave
def store_exif
if file && model
begin
exif = Exif::Data.new(IO.read(file.path))[:exif].to_h
exif.delete(:maker_note)
model.exif = exif.to_json
rescue
end
end
end
当我读取属性时,类型是字符串。
p.exif
=> "{\"exposure_time\":\"1/4\",\"fnumber\":\"8/5\",\"exposure_program\":2,\"iso_speed_ratings\":1250,\"exif_version\":\"0231\",\"date_time_original\":\"2020:10:04 21:42:05\",\"components_configuration\":\"\u0001\u0002\u0003\u0000\",\"shutter_speed_value\":\"61506/32255\",\"aperture_value\":\"14447/10653\",\"brightness_value\":\"-42954/7669\",\"exposure_bias_value\":\"-15/256\",\"metering_mode\":5,\"flash\":16,\"focal_length\":\"21/5\",\"subject_area\":0,\"color_space\":65535,\"pixel_x_dimension\":4032,\"pixel_y_dimension\":3024,\"sensing_method\":2,\"scene_type\":\"\u0001\",\"custom_rendered\":8,\"exposure_mode\":0,\"white_balance\":0,\"scene_capture_type\":0,\"flash_pix_version\":\"0100\"}"
p.exif.class
=> String
为什么??我需要一个包含我的属性的散列...
exif.to_json
给你一个字符串。只需将 exif
原样保存为散列: model.exif = exif
。 Rails Postgres 将完成这项工作。
我正在我的数据库中保存一些图片出口。该列是 jsonb 数据类型。
为了保存 exif,我使用了 carrierwave
def store_exif
if file && model
begin
exif = Exif::Data.new(IO.read(file.path))[:exif].to_h
exif.delete(:maker_note)
model.exif = exif.to_json
rescue
end
end
end
当我读取属性时,类型是字符串。
p.exif
=> "{\"exposure_time\":\"1/4\",\"fnumber\":\"8/5\",\"exposure_program\":2,\"iso_speed_ratings\":1250,\"exif_version\":\"0231\",\"date_time_original\":\"2020:10:04 21:42:05\",\"components_configuration\":\"\u0001\u0002\u0003\u0000\",\"shutter_speed_value\":\"61506/32255\",\"aperture_value\":\"14447/10653\",\"brightness_value\":\"-42954/7669\",\"exposure_bias_value\":\"-15/256\",\"metering_mode\":5,\"flash\":16,\"focal_length\":\"21/5\",\"subject_area\":0,\"color_space\":65535,\"pixel_x_dimension\":4032,\"pixel_y_dimension\":3024,\"sensing_method\":2,\"scene_type\":\"\u0001\",\"custom_rendered\":8,\"exposure_mode\":0,\"white_balance\":0,\"scene_capture_type\":0,\"flash_pix_version\":\"0100\"}"
p.exif.class
=> String
为什么??我需要一个包含我的属性的散列...
exif.to_json
给你一个字符串。只需将 exif
原样保存为散列: model.exif = exif
。 Rails Postgres 将完成这项工作。