use*_*203 7 ruby-on-rails rails-geocoder ransack
我创建了一个提供搜索条件的表单:
= 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
Run Code Online (Sandbox Code Playgroud)
我希望能够根据Rails Geocoder gem的"Near"功能进行搜索.有没有人知道如何合并现有的范围,或者特别是如何在Meta Search或Ransack中使用"近"范围?
到目前为止,我的所有尝试都是徒劳的.
实际上,只需在表单中添加非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 %>
Run Code Online (Sandbox Code Playgroud)
然后生成一个如下所示的参数字符串:
Parameters: {"utf8"=>"?", "q"=>{"will_teach"=>"1"}, "within"=>"10", "commit"=>"Search"}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将一些条件逻辑放入您的控制器中以保持这些参数,并将Geocoder与Ransack结合使用.我检查是否存在"within"参数,如果是,请检查它是否为数字(to_i除了数字之外的任何内容都返回0,因此> 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)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |