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

Cra*_*lot 5 ruby-on-rails mongodb mongomapper ruby-on-rails-3

我们使用的是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}"
Run Code Online (Sandbox Code Playgroud)

输出:

["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"]
Run Code Online (Sandbox Code Playgroud)

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

  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
Run Code Online (Sandbox Code Playgroud)

救命?

谢谢!

Cra*_*lot 0

发布答案让我们很痛苦,因为这巩固了我们作为“白痴、白痴、傻瓜、菜鸟、Jay Leno 粉丝”的地位,但以防万一其他人遇到同样的问题:虽然我们的模型目录在开发环境中是干净的,但生产环境中的模型目录包含旧的测试文件...其中包含带有“id”键的旧模型。

显然,删除旧文件和旧模型解决了一切,尽管我们的自尊和头脑受到了惊人的伤害(过度撞击墙壁)。