У меня есть ресурс с именем Cimgs. Вы можете увидеть их в #index. Их можно искать по содержимому, через Sphinx. Также можно искать по тегам. И можно искать по другому связанному Cimg, проверяя наличие коллизий тегов.
И вот мой вопрос: какой способ лучше всего это проложить?Должен ли я передать дополнительный параметр в #index и выполнить поиск по параметру?Ведь они все используют один и тот же вид.Или я должен создать действие для каждого метода поиска?Или, может быть, целый ресурс?
В настоящее время я делаю следующее:
resources :cimgs, path: 'pics' do
collection do
get 'search(/:q)', action: :index, search_by: :content, as: :search_by_content
get 'tags/:tag', action: :index, search_by: :tags, as: :search_by_tag
get 'page/:page', action: :index
end
member do
get 'related', action: :index, search_by: :related, as: :search_by_related
end
end
root :to => 'cimgs#index'
Проблема в том, что я использую Kaminari для подкачки страниц, и он не обнаруживает страницу /: страница для другого маршрута, кроме корневого.(На самом деле я не знаю механизм, который он использует для обнаружения страницы /: page)
А вот мое действие контроллера:
def index
@cimgs = case params[:search_by]
when :content; Cimg.content_search params[:q], params[:page], request.remote_ip
return redirect_to @cimgs[0] if @cimgs.length == 1
when :tag; Cimg.search_by_tag params[:tag], params[:page]
when :related; Cimg.search_related_to params[:id], params[:page]
else; Cimg.get_for_front_page params[:page]
end
render :index
end