2012-03-18 68 views
4

我有一個列表表,列表模型和listing_controller類。我寫了一個需要2個參數的方法:緯度和經度。然後它檢索圍繞該座標約5公里的列表。在listings_controller這是我的方法寫道:Rails:我如何設置不需要:id參數的方法的路由,而是需要2個查詢參數

def around 
    lat = params[:latitude] 
    long = params[:longitude] 
    @surroundings = Listing.where("latitude = ? and longitude = ?", lat, long)  
end 

我希望做的是有一個網址,其中,當客戶端瀏覽器調用將提供一個緯度和經度作爲我的routes.rb文件設置2個參數。 No:可以提供id參數,因爲客戶端瀏覽器不知道id,並且數據庫中可能沒有任何與座標精確匹配的條目。記住我只想尋找圍繞具體座標的列表。

那麼如何在路由文件中寫入這個?

這裏是我的「耙路線」命令

listings  /         listings#index 
      GET /listings(.:format)     listings#index 
      POST /listings(.:format)     listings#create 
new_listing GET /listings/new(.:format)    listings#new 
edit_listing GET /listings/:id/edit(.:format)   listings#edit 
    listing GET /listings/:id(.:format)    listings#show 
      PUT /listings/:id(.:format)    listings#update 
      DELETE /listings/:id(.:format)    listings#destroy 
        /:controller(/:action(/:id))(.:format) :controller#:action 

的輸出,這是我的routes.rb文件的外觀:

Businesses::Application.routes.draw do 

root to: 'listings#index', as: 'listings' 

resources :listings 
match ':controller(/:action(/:id))(.:format)' 

這是我希望的使用從客戶端瀏覽器URL字符串:

http://localhost:3000/listings/around?latitude=XXX&longitude=XXXX 

任何幫助,將不勝感激

回答

2

你已經有了所有的東西,唯一的問題是如何生成實際的URL。我看到它的方式,你有兩個選擇:

  1. 只需使用的路徑,你已經:

    listings_path(:latitude => lat, :longitude => lng) 
    

    這會工作,併產生像/listings?latitude=XXX&longitude=XXX

  2. 的路徑如果你想要的/listings/around?...版本可以這樣添加:

    # routes.rb 
    resources :listings do 
        collection do 
        get :around 
        end 
    end 
    

    然後你就可以讓你的URL是這樣的:

    around_listings_path(:latitude => lat, :longitude => lng) 
    
+0

OK謝謝許多。我現在就給一個鏡頭,看看會發生什麼...... – banditKing 2012-03-18 04:19:22

+0

謝謝,正如你所說的那樣工作! – banditKing 2012-03-18 04:25:15

0

嘗試設立 「圍繞」 行動集合:

resources :listings do 
    get :around, :on => :collection 
end 

而且在你看來

=link_to around_listings_path(:latitude => lat, :longitude => long) 
+0

非常感謝! – banditKing 2012-03-18 04:26:18

相關問題