2013-09-01 47 views
2

我有一個名爲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 
+0

當位置被創建並且您在那裏提出額外的請求時,計算的距離是否正確? – rudolph9

+0

嗯,我沒有嘗試,因爲我想避免我的Android應用程序在服務器上連續執行兩個請求,但是我想說,一旦在數據庫中Geocoder會發現它是。我會嘗試。謝謝 ! – jbihan

+0

如果您成功使用'@ location.save'而不是返回'@ location',那麼您會重定向到'index'? – rudolph9

回答

2

事實上它是簡單,我希望,我後我找到了解決辦法,如果其他人不知道如何做到這一點。

locations_controllercreate方法,我創建一個實例變量來存儲的distance_to結果:

@distance_to = @location.distance_to([params[:current_latitude],params[:current_longitude]]) 

然後在create.json.rabl我創建了一個node顯示這些實例變量:

node (:distance_to) { @distance_to } 

我真的認爲這會比這更難... 感謝@ rudolph9的幫助!