2011-03-01 50 views
4

我創建一個簡單的rails應用程序來修改現有的mongo數據庫中的數據。我使用mongoid進行交互,並且可以很好地讀取/銷燬對象。mongoid update_attributes改變數據類型

問題出現的是我的mongo文檔有一個'節點',它是一串鍵值對,因記錄而異。我使用的是標準軌

MongoObject.find(BSON::ObjectId('ABC1234567890')) 
=> #<MongoObject _id: ABC1234567890, node: {"totallogins"=>11, "id"=>"logIns"}> 

形成這樣才能使後期數據的模樣來更新值:當我加載像這樣的記錄

{"commit"=>"Edit", "utf8"=>"✓", "id"=>"ABC1234567890", "mongo_object"=>{"node"=>{"totallogins"=>"12", "id"=>"logIns"}} 

如果我再做:

@mongo_object.update_attributes(params[:mongo_object]) 

這可以工作,但會將「totallogins」的數據類型從int更改爲字符串,因爲發佈數據是字符串。

現在積極的記錄處理這個本身,但我需要一個解決方案,將與mongoid一起工作。

任何想法我可以做到這一點?

回答

0

如果將節點設置爲embedded_document,則可以在聲明它們時明確設置字段類型。

class Node 
    include Mongoid::Document 
    embedded_in :mongo_object 

    field :totallogins, type: Integer 

    ... 
end 
2

謝謝。不幸的是我不能像節點的字段是完全動態的,所以我不能定義它們。我已經想出了以下解決方案,但它的一點點醜陋:

@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