2011-09-29 28 views
7

tôi đã tạo ra một hình thức mà cung cấp tiêu chí tìm kiếm:Sử dụng Meta Search hoặc lục soát với Geocoder

= 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 

Tôi muốn để có thể cũng thực hiện tìm kiếm dựa trên chức năng "Gần" của đá quý Rails Geocoder . Có ai biết làm thế nào để kết hợp một phạm vi hiện có, hoặc cụ thể là làm thế nào để sử dụng phạm vi "Gần" với Meta Search hoặc Ransack?

Cho đến nay, mọi nỗ lực của tôi đều vô ích.

Trả lời

1

có SBY ai khác đã có một vấn đề tương tự: Integrating meta_search gem in index with existing geocoder gem search (rails)

Tất nhiên nó không giống nhau, nhưng có lẽ ông đã tìm thấy một giải pháp cho nó.

Tôi sẽ xem xét điều đó vào ngày mai, vì tôi cũng cần triển khai điều này vào ứng dụng của mình. Tôi sẽ giữ cho bạn cập nhật nếu tôi tìm thấy giải pháp :)

8

Điều này thực sự khá dễ dàng để đạt được chỉ đơn giản bằng cách thêm trường không phải search_form_for trong biểu mẫu của bạn.

Theo quan điểm của tôi (lưu ý sự khác biệt trong hai lĩnh vực theo mẫu):

<%= 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 %> 

này sau đó tạo ra một chuỗi param như sau:

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

Sau đó bạn có thể đặt một số logic có điều kiện vào bộ điều khiển của bạn để tiết kiệm các thông số này và kết hợp Geocoder với Ransack. Tôi kiểm tra xem liệu tham số "bên trong" có hiện diện không, nếu có, hãy kiểm tra xem đó là một số (to_i trả về 0 cho bất kỳ thứ gì trừ một số, do đó kiểm tra> 0).

Sau đó, tôi kết hợp Bộ mã hóa địa lý "gần" với "tìm kiếm" của Ransack.

Nếu thông số "bên trong" không có (nghĩa là người dùng không nhập số) thì tôi tìm kiếm không có bit Geocoder.

Cuối cùng tôi đang sử dụng Kaminari, vì vậy mà đi vào phần cuối của kết quả tìm kiếm:

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) 

Hope this helps!

+2

Cảm ơn bạn. Điều này có lẽ nên được chấp nhận như là câu trả lời. Dù bằng cách nào, nó thực sự đã giúp tôi. Ta. – Will

+0

Ai đó nên chấp nhận số – luisenrike

+0

@luisenrike này chỉ năm năm: D – DaveStephens

Các vấn đề liên quan