保存时间类型时mongo_mapper_acts_as_versioned失败



我正在尝试使用我分叉的 https://github.com/Bramanga/mongo_mapper_acts_as_versioned gem 在我的 mongomapper 模型上设置版本控制。但是,每当我尝试保存我的查找模型时,如果我尝试使用 Time 类型保存它,它会失败(我必须使用它,因为 MongoDB 只支持 UTC 时间,而不是日期)。

型:

class Finding
  require 'carrierwave/orm/mongomapper'
  include MongoMapper::Document
  ensure_index 'finding.document'
  plugin MongoMapper::Acts::Versioned 
  attr_accessible :found_date, :target_date, :abated_date
  key             :found_date,          Time
  key             :target_date,         Time
  key             :abated_date,         Time
  
  belongs_to      :client
  many            :uploads, :dependent => :destroy
  many            :documents, :dependent => :destroy
  timestamps!
  def found_date=(date)
    if date.present?
      self[:found_date] = Chronic.parse(date).utc.beginning_of_day
    else
      self[:found_date] = nil
    end
  end
  def target_date=(date)
    if date.present?
      self[:target_date] = Chronic.parse(date).utc.beginning_of_day
    else
      self[:target_date] = nil
    end
  end
  def abated_date=(date)
    if date.present?
      self[:abated_date] = Chronic.parse(date).utc.beginning_of_day
    else
      self[:abated_date] = nil
    end
  end
end

端子输出:

加载开发环境(Rails 3.0.10)

1 pry(main)> find = Client.first.findings .build

=> <#Finding _id: BSON::ObjectId('

4fc67c8f4e484f267c000002'), client_id: BSON::ObjectId('4f7119884e484f25bd005ee8'), custom_fields: {}, legacy_attachments: [], tags: []>

[2] 撬(主)>查找.保存

=> 真

[3] pry(main)> finding.found_date = "12/24/2012"

=> "12/24/2012"

[4] Pry(main)> finding.save

BSON::InvalidDocument: ActiveSupport::TimeWithZone 当前不受支持;请改用 UTC Time 实例。from/home/bramanga/.rvm/gems/ruby-1.9.2-p290@actionlog/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in 'serialize'

我不确定如何解决这个问题。也许我只是做错了。有什么想法吗?

修复了

分叉存储库后我自己的问题。我的解决方案就在这里。

此问题与 mongodb 支持的日期类型有关。它仅支持UTC时间戳格式。我添加了自己的escape_mongo方法,以便在持久保存到数据库之前转换为安全timestamp类型:

def escape_mongo(obj)       
    obj.is_a?(Date) || obj.is_a?(Time) ? Date.to_mongo(obj) : obj   
end

相关内容

  • 没有找到相关文章

最新更新