【问题标题】:Using Meta Search or Ransack with Geocoder将元搜索或 Ransack 与地理编码器一起使用
【发布时间】:2011-11-27 08:38:43
【问题描述】:

我创建了一个提供搜索条件的表单:

    = 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 gem 的“Near”功能进行搜索。有谁知道如何合并现有范围,或者特别是如何将“Near”范围与 Meta Search 或 Ransack 一起使用?

到目前为止,我所有的尝试都是徒劳的。

【问题讨论】:

    标签: ruby-on-rails ransack rails-geocoder


    【解决方案1】:

    这实际上很容易实现,只需在表单中添加一个 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"}
    

    然后,您可以将一些条件逻辑放入您的控制器中以将这些参数吸起来,并将 Geocoder 与 Ransack 结合使用。我检查是否存在“within”参数,如果存在,请检查它是一个数字(to_i 返回 0 表示除数字之外的任何内容,因此检查 > 0)。

    然后我将 Geocoder “near” 与 Ransack 的 “search” 结合起来。

    如果“内部”参数不存在(即用户没有输入数字),那么我会在没有地理编码器位的情况下进行搜索。

    最后我使用 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)
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢。这可能应该被接受为答案。无论哪种方式,它真的帮助了我。塔。
    • @luisenrike 才五年:D
    猜你喜欢
    • 2012-01-06
    • 2017-03-23
    • 2021-01-01
    • 2021-12-11
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多