Mongoid空间虚拟属性不会持久存在

时间:2013-01-11 20:07:53

标签: arrays ruby-on-rails-3.2 mongoid getter-setter virtual-attribute

我正在使用Mongoid Spacial在Place模型上存储坐标。我在客户端进行地理编码,并发送两个文本字段:纬度和经度。这些字段名称正确,这似乎是服务器端问题,因为坐标也会无声地在Rails控制台中保持不变。

模型

class Place
  include Mongoid::Document
  include Mongoid::Paranoia
  include Mongoid::Timestamps
  include Mongoid::Spacial::Document

  attr_accessible :coordinates, :latitude, :longitude

  field :coordinates, type: Array, spacial: true

  spacial_index :coordinates

  def latitude
    coordinates[:lat]
  end

  def latitude=(latitude)
    self.coordinates[:lat] = latitude
  end

  def longitude
    coordinates[:lng]
  end

  def longitude=(longitude)
    self.coordinates[:lng] = longitude
  end
end

据我所知,coordinates字段是一个数组,它作为一个对象返回。

我可以使用以下命令成功设置坐标:

self.coordinates = [-98.765432,12.345678]

但不是这些命令:

self.coordinates[:lng] = -98.765432

self.coordinates[0] = -98.765432

如何编写setter以使其工作?

1 个答案:

答案 0 :(得分:0)

这是一个有效的解决方案,但肯定有更好的方法。

  def latitude
    coordinates[:lat]
  end

  def latitude=(lat)
    self.coordinates = [self.longitude,lat]
  end

  def longitude
    coordinates[:lng]
  end

  def longitude=(lng)
    self.coordinates = [lng,self.latitude]
  end