Передача данных из формы через строку запроса в Rails - PullRequest
2 голосов
/ 21 июля 2010

Я создаю приложение с функцией поиска, и мне бы хотелось, чтобы оно было настроено аналогично поиску в Google или Twitter, где есть целевая страница с формой поиска в корневом URL, а затем данные из этой формы передаются.через строку запроса, которая формирует URL для страницы результатов (например: www.domain.com/search?query=my+search+query).

На данный момент я знаю, как передатьданные из поиска с использованием хэша params, но Я хотел бы знать, как передать данные и получить к ним доступ, используя строку запроса.

Мое лучшее предположение - это сделано черезмаршрутизация, где вы добавляете что-то вроде следующего в маршрутизацию для действия поиска:

:query => params[name_of_search_form_element]

, затем обращайтесь к этому значению в контроллере, используя хэш параметров, но я не уверен, что это лучшепуть.Какие-нибудь мысли?Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 июля 2010

Я бы предложил следующую процедуру для настройки простого поиска.

  1. Создайте маршрут поиска в вашем файле "rout.rb".Это позволяет вам перехватывать все вызовы путей, начинающиеся с 'search', например http://www.example.com/search.

    map.search 'search', :controller => 'search', :action => 'search'
  2. Создать обычную форму поиска в представлении, как в следующем примере.Вы можете увидеть вспомогательный метод search_url, который предоставляется вашей конфигурацией маршрута.Этот помощник создает URL-адрес, указывающий прямо на отображаемую страницу поиска.Вы также должны заметить вызов :method => 'get', который покажет все ваши параметры отправки как часть URL.Кроме того, мы не хотим отправлять имя кнопки поиска в URL, поэтому мы установили :name => nil.Мы также отобразим искомый термин в текстовом поле.Параметр поиска, введенный пользователем, будет доступен нам в контроллере через params[:search], который является названием поля поиска.

    <%- form_tag(search_url, {:method => 'get'}) do -%>
        <%= text_field_tag(:search, params[:search]) >
        <%= submit_tag('Search', :name => nil) >
    <%- end -%>
  3. Теперь мы можем настроитьпоисковый контроллер.Как видите, если мы найдем параметр поиска, мы попытаемся найти пользователей по этому имени.Если у нас нет параметра поиска, все пользователи будут отображаться в результирующем представлении.

    class SearchController
      def search
        if params[:search].present?
          @users = User.find(:all, :conditions => ['name LIKE ?', params[:search]]))
        else
          @users = User.find(:all)
        end
      end
    end
  4. Все, что вам осталось, - это создать search.html.erb.файл в «view / search /» и отображать каждого пользователя в переменной @users.

Если я что-то не забыл, вы сможете настроить простую форму поиска с помощьюсейчас.Удачи в поисках!

1 голос
/ 21 июля 2010

Это довольно легко сделать с помощью гиперссылки:

link_to "Page", :controller => :stuffs, :action => :index, :my_param => 'foo'
link_to "Page", @thing.merge({:my_param => 'foo'})

С формой, я думаю, настройка :method => :get поможет.Посмотрите на раздел 1.1 этой страницы: http://guides.rubyonrails.org/form_helpers.html

...