我有一个列表,包含一个列表模型和一个listing_controller类。我写了一个方法,需要2个参数:纬度和经度。然后它检索围绕该坐标约5公里的列表。在listing_controller中,这是我写的方法:
def around
lat = params[:latitude]
long = params[:longitude]
@surroundings = Listing.where("latitude = ? and longitude = ?", lat, long)
end
我想要做的是在我的routes.rb文件中设置一个url,当客户端浏览器调用时,它将提供纬度和经度作为2个参数。 No:id参数可以提供,因为客户端浏览器不知道id,而且数据库中可能没有任何与坐标完全匹配的条目。记住我只想搜索特定坐标周围的列表。
那我怎么在路线文件中写这个呢?
这是我的“rake routes”命令的输出
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
任何帮助将不胜感激
答案 0 :(得分:2)
你已经掌握了大部分内容,唯一的问题是如何生成实际的URL。我认为你有两种选择:
只需使用您已有的路径:
listings_path( :latitude => lat, :longitude => lng )
这将有效并生成类似/listings?latitude=XXX&longitude=XXX
如果您想要/listings/around?...
版本,可以像这样添加:
# routes.rb
resources :listings do
collection do
get :around
end
end
然后你可以像这样制作你的网址:
around_listings_path( :latitude => lat, :longitude => lng )
答案 1 :(得分:0)
尝试将“around”动作设置为集合:
resources :listings do
get :around, :on => :collection
end
在你看来
=link_to around_listings_path(:latitude => lat, :longitude => long)