Получение значений поиска путем нажатия на ссылки в макете приложения

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть ряд городов в верхней части макета. У меня также есть боковая панель со списком категорий. В представлении, которое отображается в этом макете, я хотел бы запросить результаты модели с полями категории и местоположения, на основе того, какой город был выбран, и по какой категории был сделан последний щелчок. введите описание изображения здесь

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

 def self.search(query, query2, query3)
    where("title like ?", "%#{query}%").
    where("category = ?", "%#{query2}%").
    where("city = ?", "%#{query3}%")
end
  

Для меня это последний шаг в завершении большого проекта, и я был бы очень признателен за любую помощь. Если ничего другого не получится, я просто использую два выпадающих списка для категории и местоположения, но мне бы очень хотелось, чтобы это заработало.

Комментарии:

1. Вам нужно будет использовать Javascript для обновления результатов при каждом нажатии на категорию.

2. Я не против перезагрузки страницы, я просто хочу убедиться, что при поиске используются как категория, так и местоположение.

3. Как выглядят ваши параметры?

Ответ №1:

Маршрутизация

По сути, вам нужно будет определить route , чтобы справиться с этим, что позволит вам передавать серию parameters по вашим ссылкам на ваш контроллер, что позволит вам возвращать данные, определенные ссылками

Независимо от того, выполняете ли вы это простым HTTP способом или через Javascript , это один и тот же процесс link > controller > response

Я бы сделал это:

 #config/routes.rb
resources :offers do
   collection do
      get :search
   end
end
  

Это позволит вам создавать свои ссылки следующим образом:

 <% @cities.each do |city| %>
   <%= link_to city.name, offers_search_path(city: city.name) %>
<% end %>
  

Это должно создать ссылку: domain.com/offers/search?city=scarborough

Контроллер

Когда у вас будет ссылка, подобная приведенной выше, ваш контроллер сможет обрабатывать city параметр, позволяя вам выполнять условный поиск следующим образом:

 #app/controllers/offers_controller.rb
Class OffersController < ApplicationController
   def search
       @result = Offer.search params[:city] #-> considering you want to use a class method
   end
end
  

Ajax

Если бы вы хотели выполнить поиск через ajax, вы бы выполнили все вышеперечисленное, за исключением того, что вы обрабатывали бы ссылку как remote одну:

 <%= link_to city.name, offers_search_path(city: city.name), remote: true %>
  

При этом на ваш контроллер будет отправлен ajax-запрос, который вы сможете обработать следующим образом:

 #app/controllers/offers_controller.rb
Class OffersController < ApplicationController
   respond_to :js, :json, :html
   def search
       @result = Offer.search params[:city]
       respond_with @result
   end
end