#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