2016-07-24 9 views
0

Ich bekomme keine Filterfunktion zu arbeiten, obwohl ich fühle, dass ich wirklich nah an einer Lösung bin. In meiner App können Sie Suchanfragen für Produkte erstellen, die andere Personen beantworten können. Jetzt möchte ich filterrific implementieren, um diese Suchanfragen zu sortieren (und später auch zu filtern). Ich folgte der brillianten Dokumentation auf http://filterrific.clearcove.ca/, aber ich finde nicht den Grund, warum es in meiner App nicht funktioniert. Ich bekomme keine Fehler, aber was ich auch mache, sortiert nicht.Schienen mit Filterrific funktioniert nicht

Das ist meine Suche Modell:

filterrific(
     default_filter_params: { sorted_by: 'created_at_desc' }, 
     available_filters: [ 
     :sorted_by, 
     ] 
    ) 

scope :sorted_by, lambda { |sort_option| 
    # extract the sort direction from the param value. 
    direction = (sort_option =~ /desc$/) ? 'desc' : 'asc' 
    case sort_option.to_s 
    when /^created_at_/ 
    # Simple sort on the created_at column. 
    # Make sure to include the table name to avoid ambiguous column names. 
    # Joining on other tables is quite common in Filterrific, and almost 
    # every ActiveRecord table has a 'created_at' column. 
    order("searches.created_at #{ direction }") 
    else 
    raise(ArgumentError, "Invalid sort option: #{ sort_option.inspect }") 
    end 
} 


def self.options_for_sorted_by 
    [ 
     ['Created at (Newest first)', 'created_at_desc'], 
     ['Created at (Oldest first)', 'created_at_asc'] 
    ] 
end 

Das ist mein Search-Controller ist:

<%= form_for_filterrific @filterrific do |f| %> 

<div> 
    Sorted by 
    <%= f.select(:sorted_by, @filterrific.select_options[:sorted_by]) %> 
</div> 
<div> 
    <%= link_to(
     'Reset filters', 
     reset_filterrific_url, 
    ) %> 
    </div> 
    <%= render_filterrific_spinner %> 
    <% end %> 

    <%= render 'searches/search', locals: { searches: @searches } %> 

mein Teil Das ist:

def index 

@filterrific = initialize_filterrific(
     Search, 
     params[:filterrific], 
     select_options: { 
     sorted_by: Search.options_for_sorted_by 
     }, 
     persistence_id: 'shared_key', 
     default_filter_params: {}, 
     available_filters: [], 
) or return 
    @searches = @filterrific.find.paginate(page: params[:page], per_page: 5) 

    respond_to do |format| 
    format.html 
    format.js 
end 

end 

Das ist mein index.html.erb ist _search.html.erb:

<div id="filterrific_results"> 
<% @searches.each do |search| %> 
<%= time_ago_in_words(search.created_at) %> 
... 
<% end %> 
</div> 
<%= will_paginate @searches %> 

Und schließlich meine index.js.erb:

<% js = escape_javascript(
    render(partial: 'searches/search', locals: { searches: @searches }) 
) %> 
$("#filterrific_results").html("<%= js %>"); 

Warum fühle ich mich zu einer Lösung der Nähe? Eine Änderung der default_filter_params von 'created_at_desc' zu 'created_at_asc' funktioniert. Und auch die Optionsauswahlliste ändert sich automatisch zu "erstellt um (älteste zuerst)". Aber wenn ich die Option wähle, geschieht nichts, außer der Spinner erscheint für eine Sekunde.

Vielen Dank für jede Hilfe!

+0

Wenn ich deaktivieren Sie das Auto AJAX einreichen Formular aus und klicken eintragen in dem folgenden Link führt: Suche UTF8 =% E2% 9C% 93 & filterrific% 5Bsorted_by% 5D = created_at_asc & Commit = Filter mabye, das das Problem zu finden, hilft !? – Eckenmeyer

Antwort

0

Ich habe gerade die Lösung selbst gefunden. Ich habe :sorted_by zum Search Controller hinzugefügt.

Verwandte Themen