Я простой поисковый контроллер, который хранит историю поиска, я должен использовать маршрутизацию ресурсов или нересурс? - PullRequest
0 голосов
/ 14 января 2011

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

Я ищу лучшее или«рельсовый» способ справиться с этим.Должен ли я установить контроллер и нересурсные маршруты, которые обрабатывают поиск и сохраняют данные в пользовательской таблице;или я должен создать ресурс для запросов с маршрутом ресурса и дополнительным путем для поиска?

Ответы [ 2 ]

7 голосов
/ 13 февраля 2013

Немного рефакторинг:

rails g controller searches

Это аккуратное правило позволит вам использовать отличный контроллер поиска действий на ресурс:

# config/routes.rb
get 'search/:action' => 'searches#:action'

Вот упрощенная версия такого:

class SearchesController < ApplicationController

  def foos
    search do
      Foo.where :name => params[:q]
    end
  end

  def bars
    search do
      Bar.where :title => params[:q]
    end
  end

  private

  def search(&block)    
    if params[:q]
      @results = yield if block_given?

      respond_to do |format|
        format.html # resources.html.erb
        format.json { render json: @results }
      end
    else
      redirect_to root_url, :notice => 'No search query was specified.'
    end
  end

end

Примеры запросов URL:

/search/foos?q=baz
/search/bars?q=baz
4 голосов
/ 14 января 2011

Мои мысли:

В config / rout.rb:

match '/search/:query' => 'search#search', :as => 'search'

Создать SearchController:

rails generate controller search

В app / controllers / search_controller.rb:

class SearchController < ApplicationController
  def search
    # Use params[:query] to perform the search
  end
end

Например, запрос для «яблок» будет выглядеть так: http://example.com/search/apples

Вы можете создавать ссылки на запросы с помощью: search_path('apples')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...