Использование Meta Search или Ransack с Geocoder - PullRequest
7 голосов
/ 29 сентября 2011

Я создал форму, которая предоставляет критерии поиска:

    = search_form_for @q do |f|
  %h3
    Search:
  = f.label :category_id
  %br
  = f.collection_select :category_id_eq, Category.all, :id, :name, :include_blank => true
  %br
  = f.label "Sub-Category"
  %br
  = f.collection_select :subcategory_id_eq, Subcategory.all, :id, :name, :include_blank => true, :prompt => "select category!"
  %br
  = f.label "Contains"
  %br
  = f.text_field :title_or_details_cont
  %br
  = f.submit

Я хочу также иметь возможность выполнять поиск на основе "Ближней" функциональности гема Rails Geocoder.Кто-нибудь знает, как включить существующую область или, в частности, как использовать «ближнюю» область с Meta Search или Ransack?

До сих пор все мои попытки были тщетными.

Ответы [ 2 ]

8 голосов
/ 27 декабря 2012

Это на самом деле довольно легко сделать, просто добавив в форму поле non-search_form_for.

На мой взгляд (обратите внимание на разницу в двух полях формы):

<%= search_form_for @search do |f| %>
    <%= f.label :will_teach, "Will Teach" %>
    <%= f.check_box :will_teach %>

    <%= label_tag :within %>
    <%= text_field_tag :within, params[:within], {:class => "span1"} %> miles
<% end %>

Затем получается строка параметра, подобная следующей:

Parameters: {"utf8"=>"✓", "q"=>{"will_teach"=>"1"}, "within"=>"10", "commit"=>"Search"}

Вы можетезатем добавьте в контроллер некоторую условную логику, чтобы собрать эти параметры, и объедините геокодер с Ransack.Я проверяю, присутствует ли параметр "inside", если это так, проверьте, что это число (to_i возвращает 0 для всего, кроме числа, поэтому проверка> 0).

Затем я объединяю геокодер "рядом"с" поиска "Рансак.

Если параметр «в» отсутствует (то есть пользователь не ввел число), тогда я ищу без битов геокодера.

Наконец, я использую Kaminari, так чтоидет в конце результатов поиска:

   if params[:within].present? && (params[:within].to_i > 0)
        @search = Tutor.near(request.location.city,params[:within]).search(params[:q])
    else
      @search = Tutor.search(params[:q])
    end

    @tutors = @search.result.page(params[:page]).per(9)

Надеюсь, это поможет!

1 голос
/ 29 сентября 2011

есть еще кто-то, у кого была похожая проблема: Интеграция gem_search gem в индекс с существующим поиском geocoder gem (rails)

Конечно, это не то же самое, но, возможно, он нашел решениек этому.

Я посмотрю на это завтра, так как мне также нужно внедрить это в мое приложение.Я буду держать вас в курсе, если найду решение :)

...