对于MongoMapper模型,取消设置操作失败,无法从模型中删除/删除键

时间:2011-10-28 07:09:11

标签: ruby-on-rails ruby-on-rails-3 mongodb mongomapper

我们使用的是mongodb 2.0.0,mongo gem 1.4.1,mongo_mapper 0.9.2,rails 3.0.6。

我们喜欢MongoMapper,但我们需要帮助解决一个令人讨厌的问题:我们从一些测试中得到了一个密钥,但调用obj.unset却无法做任何事情。

具体来说,我们试图删除一个“id”键(不是“_id”),因为它导致MM将obj.id视为与我们不想要的obj._id不同。

清理完数据库之后,我们从一个不执行任何操作的控制器运行这些命令:(我们也尝试从rails控制台运行相同的代码,但它也失败了。)

logger.info "#{Game.keys.keys.inspect}"
Game.unset({}, :id)
logger.info "#{Game.keys.keys.inspect}"
Game.unset(:id)
logger.info "#{Game.keys.keys.inspect}"

输出:

["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"]
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"]
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"]

我们的游戏模型中定义的当前键:

  key :players, Array, :default => []
  key :player_index, Integer, :default => 0
  key :puzzles, Array, :default => []
  key :puzzle_index, Integer, :default => 0
  key :join_code, String, :default => nil
  key :jackpot, Integer, :default => 0
  key :log, Array, :default => []
  key :created_at, Time
  key :updated_at, Time
  key :ended_at, Time, :default => nil

帮助?

谢谢!

1 个答案:

答案 0 :(得分:0)

我们很难发布答案,因为这巩固了我们的状态“白痴,白痴,傻瓜,新手,Jay Leno粉丝”,但万一其他人碰到同样的问题:我们的模型目录在开发中是干净的环境,生产环境中的模型目录包含旧的测试文件...其中包含一个带有“id”键的旧模型。

显然,删除旧文件和旧模型解决了所有问题,尽管我们的自负和头部(从过度撞击墙壁)留下了惊人的瘀伤。