2011-10-19 222 views
2

如何將接收到的標記座標保存爲json參數並將其構建到具有正確值的lat和lng字段?我試圖在很多方面做到這一點,但它給了每個人失敗。低於那些在我看來最接近的是好的。如何將數據從json數組保存到數據庫MongoDB?

#controller: 
def create 
    @user = User.new() 
    received_json = ["{\"lat\":52.38521483550798,\"lng\":16.866459809082016}", "{\"lat\":52.40458894240522,\"lng\":16.856503449218735}", "{\"lat\":52.42605757375466,\"lng\":16.86989303662108}"] 
    # objArray=JSON.parse(received_json.to_json) 
    objArray=ActiveSupport::JSON.decode(received_json.to_json) 

    #example 1 
    objArray.each do |obj| 
    @user.markers.build(obj) 
    end 
    # NoMethodError (undefined method `each_pair' for "{\"lat\":52.38521483550798,\"lng\":16.866459809082016}":String): 

    #example 2 
    objArray.each do |obj, value| 
    @user.markers.build(obj=>value) 
    end 
    # BSON::InvalidKeyName ({"lat":52.38521483550798,"lng":16.866459809082016} - key must not contain '.'): 

    #example 3 
    objArray.each do |obj| 
    @user.markers.build(lat:obj) 
    end 
    # This approach save data but in one field lat in user markers array 
    # Data Saved: {"_id":"4e9eac161e7bf208280002fb","markers":[{"_id":"4e9eac161e7bf208280002fc","lat":"{\"lat\":52.38521483550798,\"lng\":16.866459809082016}"},{"_id":"4e9eac161e7bf208280002fd","lat":"{\"lat\":52.40458894240522,\"lng\":16.856503449218735}"},{"_id":"4e9eac161e7bf208280002fe","lat":"{\"lat\":52.42605757375466,\"lng\":16.86989303662108}"}]} 
end 

#model 
class User 
    include Mongoid::Document 
    field :name, :type => String 
    embeds_many :markers, :inverse_of => :user 
end 

class Marker 
    include Mongoid::Document 
    field :lat, :type => Float 
    field :lng, :type => Float 
    embedded_in :user, :inverse_of => :marker 
end 

回答

3

試試下面的代碼

def create 
    @user = User.new 
    received_json = ["{\"lat\":52.38521483550798,\"lng\":16.866459809082016}", "{\"lat\":52.40458894240522,\"lng\":16.856503449218735}", "{\"lat\":52.42605757375466,\"lng\":16.86989303662108}"] 
    markers = received_json.collect { |attributes| ActiveSupport::JSON.decode(attributes) } 
    markers.each do |marker| 
    @user.markers.build(marker) 
    end 
    @user.save 
end 
+0

您的幫助超級感謝! – leon

+0

沒有提到friend.Just分享我所知道的:) –