我有一個名爲Location
的模型,它使用Geocoder在創建時從座標中檢索地址。然後,我有一個Android應用程序,詢問周圍的特定點的位置列表控制器在index
方法我locations_controller
的:Rails - 在rabl文件中使用params []
def index
@locations = Location.near([params[:latitude], params[:longitude]], params[:search_radius], :order => :distance)
end
,其結果是在Rabl的JSON格式並傳送到應用程序:
child :data do
child @location do
attributes :id, :name, :address, :city, :state, :zipcode, :country_name, :latitude, :longitude, :distance
end
end
目前爲止效果很好,並且:distance
是自動計算的。
但現在我給了用戶在應用中創建一個Location
的可能性,所以我設計了create
方法是這樣的:
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
創造的偉大工程,我可以發送包含基本的Rabl的文件信息給用戶,但我的問題是:distance
未計算。
我想用同樣的Rabl的模板,對於index
方法,並添加這樣的事情,但它不工作:
node(:distance) { |location| location.distance_to(params[:latitude], params[:longitude]) }
我可以使用PARAMS在Rabl的文件計算的呢?
或者我必須在控制器中完成嗎?我需要在模型中添加屬性嗎?
UPDATE
這裏是我的Location
型號:
class Location < ActiveRecord::Base
attr_accessible :address, :city, :state, :zipcode, :country_name, :latitude, :longitude, :name
reverse_geocoded_by :latitude, :longitude do |obj,results|
if geo = results.first
obj.address = geo.street_address
obj.city = geo.city
obj.state = geo.state_code
obj.zipcode = geo.postal_code
obj.country_name = geo.country
end
end
after_validation :reverse_geocode
end
當位置被創建並且您在那裏提出額外的請求時,計算的距離是否正確? – rudolph9
嗯,我沒有嘗試,因爲我想避免我的Android應用程序在服務器上連續執行兩個請求,但是我想說,一旦在數據庫中Geocoder會發現它是。我會嘗試。謝謝 ! – jbihan
如果您成功使用'@ location.save'而不是返回'@ location',那麼您會重定向到'index'? – rudolph9