2

How to save the marker coordinates received as json parameter and build it to lat and lng fields with right values? I tried to do this in many ways but it gave everyone fails. Below those that are closest in my opinion good.

#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

1 Answer 1

3

Try the following code

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 
Sign up to request clarification or add additional context in comments.

1 Comment

No mention friend.Just sharing what i know :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.