2016-12-16 2 views
5

Ich verwende erweiterte Suche in Ransack, die standardmäßig UND hat. Ich habe es als OR gemacht, indem .try (: fusionieren, m: ‚oder‘))Wie bekomme ich Condition Group in Ransack?

@search = Data.search(params[:q].try(:merge, m: 'or')) 

aber ich bin nicht in der Lage die UND/ODER Dropdown als Konditionsgruppe zu erhalten, wie hier in Ransack Demo gezeigt http://ransack-demo.herokuapp.com/users/advanced_search

enter image description here

so wie es leider Ransack Wiki zu tun hat keine Erwähnung darüber.

UNSERE CODE

data_controller.rb

def search 

    @search = Data.search(params[:q]) 
    @datum = @search.result(:distinct=>true).paginate(page: params[:page], per_page: 10) 

    if params[:q].nil? 
     @datum = Prospect.where(:id => 0).paginate(page: params[:page], per_page: 10) 
    end 

    @page = params[:page] || 0 
    @pids = @search.result(:distinct=>true).pluck(:id) 

    @search.build_condition 
    # @search.build_grouping unless @search.groupings.any? (I have tried this code too but this gives an error) 
end 

routes.rb

resources :data do 
    collection do 
     get :search 
     post :search, to: 'data#search' 
    end 
end 

data.html.erb

<script type="text/javascript"> 
    var ids = <%= @pids %>; 
</script> 

<section class="psf"> 
    <div class="container"> 
     <h1>All Data</h1> 
     <div class="row"> 
      <div class="col-lg-10"> 
       <div class="form_search"> 
        <%= search_form_for @search, url: search_data_index_path, html: { method: :get, class: "data_search" } do |f| %> 
        <%= f.condition_fields do |c| %> 
        <%= render "condition_fields", f: c %> 
        <% end %> 
        <p><%= link_to_add_fields "Add Conditions", f, :condition %></p> 
        <br> 
        <div class="actions"> 
         <%= f.submit "Search", :class => "btn btn-primary" %> 
        </div> 
        <% end %> 
       </div> 

      </div> 

     </div> 
     <br> 
     <% if [email protected]? %> 
     <div class="total_count"><b><%= @pids.count %> Records Found.</b></div> 
     <% end %> 
+0

können Sie Ihr Formular anzeigen? – MZaragoza

+1

können Sie auch den genauen Fehler angeben, den Sie bekommen? – MZaragoza

+0

@MZaragoza - Ich habe die Frage mit vollem Quellcode aktualisiert. Dieser Code funktioniert, aber er zeigt nicht die UND/ODER-Option namens Condition Groups (wie in Ransack Demo gezeigt), die wir benötigen. – iCyborg

Antwort

3

Wenn Sie Überprüfen Sie die erweiterte Demo, die Sie finden, dass diese m: 'or' in Bedingung Gruppenhash nicht direkt in den q Parameter platziert wird.

Der einfachste Weg, es zu erreichen, ist nur ein verstecktes Feld wie so zu gruppieren Felder hinzufügen hier

<%= search_form_for @search, url: search_data_index_path, html: { method: :get, class: "data_search" } do |f| %> 
    <%= f.grouping_fields do |g| %> 
    <%= g.combinator_select %> 
    <%= g.condition_fields do |c| %> 
     <%= render "condition_fields", f: c %> 
    <% end %> 
    <% end %> 
    <p><%= link_to_add_fields "Add Conditions", f, :condition %></p> 
    <br> 
    <div class="actions"> 
     <%= f.submit "Search", :class => "btn btn-primary" %> 
    </div> 
<% end %> 

Sie können auch überprüfen, wie Parameter in der Demo

enter image description here

gesendet werden

als Sie können sehen, von Bild Merge Parameter ist unter g Parameter

HINWEIS Wenn Sie benutzerdefinierte Werte für anyall Worte Kasse Translate module möchten.

Wie Sie world Methode Fallbacks zu I18n.translate so in diesem Fall sehen Sie nur benutzerdefinierte Werte in en.yml unter ransack.all und ransack.all Schlüssel setzen.

+0

Ich habe tatsächlich einige Fortschritte gemacht, nachdem ich die Frage gepostet habe und konnte die Drop-Down mit f.combinator_select erreichen. Bitte überprüfen Sie den aktuellen Code http://stackoverflow.com/questions/41297430/how-to-get-conditional-groups-in-ransack. Können Sie diesen Code überprüfen, wie es jetzt scheint, ist das Problem verschachtelte Form in Schienen. Ich werde diese Antwort auch akzeptieren, wenn ich diese Arbeit bekommen kann (und den Arbeitscode in Frage stelle) – iCyborg

+0

@iCyborg nur den Code überprüfen, den ich in der Antwort gelassen habe, es benutzt 'grouping_fields', das scheint, dass Sie in Ihrem Code – mixan946

+0

leider fehlen Der obige Code hat das Dropdown nicht angezeigt. Es gibt keinen Fehler, indem Sie einfach das OR unbemerkt senden. – iCyborg

Verwandte Themen