我创建了一个简单的rails应用程序来修改现有mongo数据库中的数据.我正在使用mongoid进行交互,可以很好地读取/销毁对象.
问题来自于我的mongo文档有一个“节点”,它是一组键值对,具体取决于记录.当我像这样加载记录时:
MongoObject.find(BSON::ObjectId('ABC1234567890'))
=> #<MongoObject _id: ABC1234567890, node: {"totallogins"=>11, "id"=>"logIns"}>
我正在使用标准的rails表单来更新值,因此帖子数据如下所示:
{"commit"=>"Edit", "utf8"=>"✓", "id"=>"ABC1234567890", "mongo_object"=>{"node"=>{"totallogins"=>"12", "id"=>"logIns"}}
如果我那么做:
@mongo_object.update_attributes(params[:mongo_object])
这可以工作但是将“totallogins”的数据类型从int更改为字符串,因为post数据是一个字符串.
现在活跃的记录处理这个本身,但我需要一个适用于mongoid的解决方案.
我有什么想法可以做到这一点?
最佳答案 谢谢.不幸的是我不能因为节点的字段是完全动态的所以我无法定义它们.我想出了以下解决方案,但它有点难看:
@mongo_object.node.each do |k,v|
new_value = params[:mongo_object][:node][k.to_sym]
new_value = new_value.to_i if v.class == Fixnum
@mongo_object.node[k] = new_value
end
@mongo_object.save