首页 > 解决方案 > JSON模型中的条件测试

问题描述

在定义 json 对象时,我需要知道如何在 rails 方法中添加条件 if 测试:

def save_metadata
    if model.class == Medium && file.present? && file.content_type.end_with?( 'jpeg' )
      exif_info = EXIFR::JPEG.new( url_or_path )
      if exif_info.gps.nil?
        model.metadata = {
          width:              exif_info.width,
          height:             exif_info.height,
          image_width:        exif_info.image_width,
          image_length:       exif_info.image_length,
          if exif_info.date_time.utc?
          date_time_original: exif_info.date_time.utc
        }
      else
        model.metadata = {
          width:              exif_info.width,
          height:             exif_info.height,
          make:               exif_info.make,
          model:              exif_info.model,
          date_time_original: exif_info.date_time.utc,
          image_width:        exif_info.image_width,
          image_length:       exif_info.image_length,
          gps_latitude:       exif_info.gps.latitude,
          gps_longitude:      exif_info.gps.longitude,
          gps_date_stamp:     format_date( exif_info ),
          gps_time_stamp:     format_date_time( exif_info )
        }
      end
      model.save!
    end
  end

我想测试exif_info.date_time.utc是否不为零,我收到此错误:

语法错误,意外 ':',期待关键字结束 date_time_original: exif_info.date_time.utc

标签: ruby-on-railsjsonif-statementmodel

解决方案


您看到的错误是因为您if在构建Hash. 您可以在获得哈希后执行此操作。您可以有条件地在哈希中设置键的值,如下所示:

if exif_info.gps.nil?
  model.metadata = {
                     width:        exif_info.width,
                     height:       exif_info.height,
                     image_width:  exif_info.image_width,
                     image_length: exif_info.image_length,
                   }
  model.metadata[:date_time_original] = exif_info.date_time.utc if exif_info.date_time.utc?
else
  model.metadata = {
                     width:              exif_info.width,
                     height:             exif_info.height,
                     make:               exif_info.make,
                     model:              exif_info.model,
                     date_time_original: exif_info.date_time.utc,
                     image_width:        exif_info.image_width,
                     image_length:       exif_info.image_length,
                     gps_latitude:       exif_info.gps.latitude,
                     gps_longitude:      exif_info.gps.longitude,
                     gps_date_stamp:     format_date( exif_info ),
                     gps_time_stamp:     format_date_time( exif_info )
                   }
end

推荐阅读