2011-10-19 20 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共有する:) –

関連する問題