我有一个列表表,列表模型和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
任何帮助,将不胜感激
最佳答案 你已经掌握了大部分内容,唯一的问题是如何生成实际的URL.我看到它的方式你有2个选择:
>只需使用您已有的路径:
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 )