我正在创建一个简单的rails应用程序来修改现有mongo数据库中的数据。我使用mongoid进行交互,可以很好地读取/销毁对象。
问题来了,我的mongo文档有一个'node‘,它是一堆键值对,根据记录的不同而变化。当我像这样加载记录时:
MongoObject.find(BSON::ObjectId('ABC1234567890'))
=> #<MongoObject _id: ABC1234567890, node: {"totallogins"=>11, "id"=>"logIns"}>
我使用一个标准的rails表单来更新值,这样post数据看起来就像这样:
{"commit"=>"Edit", "utf8"=>"✓", "id"=>"ABC1234567890", "mongo_object"=>{"node"=>{"totallogins"=>"12", "id"=>"logIns"}}
如果我这样做了:
@mongo_object.update_attributes(params[:mongo_object])
这是可行的,但会将"totallogins“的数据类型从int更改为string,因为post数据是string。
现在active record自己处理这个问题,但我需要一个能与mongoid一起工作的解决方案。
你知道我该怎么做吗?
发布于 2011-03-02 12:29:52
谢谢。不幸的是,我不能,因为node的字段是完全动态的,所以我不能定义它们。我想出了下面的解决方案,但它有点丑陋:
@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
发布于 2011-03-01 19:03:49
如果将节点设置为embedded_document,则可以在声明字段类型时显式设置字段类型。
class Node
include Mongoid::Document
embedded_in :mongo_object
field :totallogins, type: Integer
...
end
发布于 2011-04-02 05:52:27
http://mongoid.org/docs/documents/提到了如何处理类型;也许要确保你的类型是整型的?
https://stackoverflow.com/questions/5157844
复制相似问题