Rails: как я могу установить маршрут для метода, который не требует параметра: id, но вместо этого требует 2 параметра запроса - PullRequest
4 голосов
/ 18 марта 2012

У меня есть таблица списков, с моделью списков и классом листингов_контроллера. Я написал метод, который требует 2 параметра: широта и долгота. Затем он получает списки, которые находятся примерно в 5 км от этой координаты. В листинге-контроллере это тот метод, который я написал:

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

Что я хотел бы сделать, так это настроить URL-адрес в моем файле rout.rb, который при вызове клиентским браузером предоставит широту и долготу в качестве 2-х параметров. Параметр No: id может быть предоставлен, так как клиентский браузер не знает id и более того, в базе данных может отсутствовать какая-либо запись с точным соответствием координатам. Помните, я ищу только списки с указанными координатами.

Так как мне написать это в файле маршрутов?

Вот вывод моей команды "rake routs"

    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

А вот так выглядит мой файл rout.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 ]

2 голосов
/ 18 марта 2012

У вас уже есть все в порядке, вопрос только в том, как создать реальный URL.На мой взгляд, у вас есть 2 варианта:

  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 голосов
/ 18 марта 2012

попробуйте настроить действие "вокруг" как коллекцию:

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

И на ваш взгляд

=link_to around_listings_path(:latitude => lat, :longitude => long)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...