Ruby on rails 使用mongomapper和rails我的记录拒绝更新

Ruby on rails 使用mongomapper和rails我的记录拒绝更新,ruby-on-rails,ruby,mongodb,mongomapper,Ruby On Rails,Ruby,Mongodb,Mongomapper,我的数据库不会更新我的活动任务。我所要做的就是用另一个更新的哈希数组替换一个哈希数组。我认为这是最简单的处理方法。代码如下: # construct the query query = Player.where( :_id => player_id).fields( :xp, :lvl_prgrssns, :active_quests, :completed_quests ) # get the player player = query.first if !player.nil?

我的数据库不会更新我的活动任务。我所要做的就是用另一个更新的哈希数组替换一个哈希数组。我认为这是最简单的处理方法。代码如下:

# construct the query
query = Player.where( :_id => player_id).fields( :xp, :lvl_prgrssns, :active_quests, :completed_quests )

# get the player
player = query.first

if !player.nil?
    return_val = player.set( :active_quests => [{"quest_id" => "123"}, {"quest_id" => "456"}])
    logger.debug "return_val = "+return_val.to_s # comes out as 180
end
我的理解是,如果一场比赛的回报是积极的,那就意味着这场比赛是成功的。在这个简化的例子中,它返回为180,但是在玩家身上活动的任务永远不会得到更新。我可以进入mongo控制台并执行以下操作:

db.players.update({_id:ObjectId("50756b1896f4f5121a00000a")}, {$set:{active_quests:[{"quest_id":"1"}, {"quest_id":"2"}] }});
活动任务将按预期更新,但无论我在rails中尝试了什么,更新似乎都会通过,但没有任何更新

以下是我尝试过的许多备选方案中的一些(所有方案都尝试过带和不带。to_mongo,带和不带player.save):


我希望这里的人可能知道我做错了什么。

进一步调查后,发现这是一个与函数外如何更新player变量有关的问题

在这种情况下,以下几行将更新记录(内存和数据库中)

player[:活动任务]玩家。活动任务)
但是,在本例中,player变量是该函数的局部变量,并且在函数返回后再次被更新

这是在仔细检查“mongod-VVV”的输出后才发现的

Player.where( :_id => params[:player_id] ).update(:active_quests => active_quests_list.to_mongo)

player.update_attributes(:active_quests => active_quests_list.to_mongo)

player_update = player.as_json
player_update["active_quests"] = active_quests_list
player.update_attributes(player_update)

return_val = query.update( "$set" => {:active_quests => player.active_quests.to_mongo} )

return_val = query.update( {:_id => params[:player_id]}, {"$set" => {:active_quests => active_quests_list.to_mongo}})
player[:active_quests] << @active_quests_list
player.push_all(:active_quests => player.active_quests)