我创建了一个提供搜索条件的表单:
= 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”功能进行搜索。有没有人知道如何合并现有的范围,或者特别是如何在Meta Search或Ransack中使用“近”范围?
到目前为止,我的所有尝试都是徒劳的。
答案 0 :(得分:8)
通过在表单中添加非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,因此&gt; 0检查)。
然后我将Geocoder“近”与Ransack的“搜索”结合起来。
如果“within”参数不存在(即用户没有输入数字),那么我在没有Geocoder位的情况下进行搜索。
最后我正在使用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 :(得分:1)
还有其他人有类似的问题: Integrating meta_search gem in index with existing geocoder gem search (rails)
当然它不一样,但也许他找到了解决方案。
明天我会调查,因为我还需要将它实现到我的应用程序中。如果我找到解决方案,我会及时通知你。)