我有一个名为Location
的模型,它使用Geocoder在创建时从坐标中检索地址。然后我有一个Android应用,它会向控制器询问我index
的{{1}}方法中特定点周围的位置列表:
locations_controller
结果在json中使用Rabl格式化并发送到应用程序:
def index
@locations = Location.near([params[:latitude], params[:longitude]], params[:search_radius], :order => :distance)
end
到目前为止效果很好,child :data do
child @location do
attributes :id, :name, :address, :city, :state, :zipcode, :country_name, :latitude, :longitude, :distance
end
end
会自动计算。
但现在我为用户提供了在应用中创建:distance
的可能性,因此我以这种方式设计了Location
方法:
create
创作效果很好,我可以将包含基本信息的rabl文件发送给用户,但我的问题是def create
@location = Location.new(params[:location])
if @location.save
@location
else
render :status => :unprocessable_entity,
:json => { :success => false,
:info => @location.errors,
:data => {} }
end
end
未计算。
我想使用与:distance
方法相同的Rabl模板并添加类似的东西,但它不起作用:
index
我可以在Rabl文件中使用params来计算吗?
或者我必须在控制器中执行此操作?我是否需要在模型中添加属性?
更新
这是我的node(:distance) { |location| location.distance_to(params[:latitude], params[:longitude]) }
模型:
Location
答案 0 :(得分:2)
事实上,我预期的更简单,如果其他人想知道怎么做,我会发布解决方案。
在create
的{{1}}方法中,我创建了一个实例变量来存储locations_controller
的结果:
distance_to
然后在@distance_to = @location.distance_to([params[:current_latitude],params[:current_longitude]])
我创建了一个create.json.rabl
来显示这个实例变量:
node
我真的认为这比那困难得多...... 谢谢@ rudolph9的帮助!