Это на самом деле довольно легко сделать, просто добавив в форму поле 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)
Надеюсь, это поможет!