我有一个带有location属性的模型,它是一个包含两个元素的数组;纬度和经度。我为这个位置定义了访问器
class Address
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Spacial::Document
field :location, :type => Array, spacial: {lat: :latitude, lng: :longitude, return_array: true }
#accessors for location
def latitude
location[0]
end
def latitude=( lat )
location[0] = latitude
end
def longitude
location[1]
end
def longitude=( lng )
location[1] = lng
end
attr_accessible :location, :latitude, :longitude
end
这是控制器代码
def create
@address = Address.new(params[:address])
if @address.save
redirect_to :action => 'index'
else
render :action => 'new'
end
end
def update
@address = Address.find(params[:id])
if @address.update_attributes(params[:address])
redirect_to :action => 'index'
else
render :action => 'edit'
end
end
并在视图级别
<%= f.hidden_field :latitude%>
<%= f.hidden_field :longitude%>
这些隐藏的字段是通过js操纵的,这没关系。我看到它查看开发人员工具
以下是控制器接收的参数
"address"=>{"latitude"=>"-38.0112418", "longitude"=>"-57.53713060000001", "city_id"=>"504caba825ef893715000001", "street"=>"alte. brown", "number"=>"1234", "phone"=>"223 4568965"}, "commit"=>"Guardar", "id"=>"504cacc825ef893715000006"}
请注意,纬度和经度参数已更改,没关系,但是此更改未将其保存到mongodb
因此,不保存纬度和经度的值。我的代码丢失了吗?
提前致谢。
---编辑---
这是工作访问者
def latitude
location[0]
end
def latitude=( lat )
self.location = [lat,self.location[1]]
end
def longitude
location[1]
end
def longitude=( lng )
self.location = [self.location[0], lng]
end
答案 0 :(得分:0)
如果您想设置数据库的字段,请使用self
始终更安全,这是一个好习惯。
第二件事,你必须使用传递给setter的参数。
结果代码:
def latitude
location[0]
end
def latitude=( lat )
self.location[0] = lat
end
def longitude
location[1]
end
def longitude=( lng )
self.location[1] = lng
end