2016-07-24 7 views
0

私は本当に解決策に近いと感じていますが、私はうまく機能しません。私のアプリケーションでは、他の人が答えることができる製品の検索リクエストを作成することができます。今度は、filterrificを実装して、これらの検索要求をソート(および後でフィルタリング)したいと思います。私はhttp://filterrific.clearcove.ca/の華麗な文書に従ったが、私のアプリではうまくいかない理由は見つからない。私は何の誤りもありませんが、私が何をしてもソートされません。Rails with Filterrificは機能していません

これは私の検索モデルである:

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 

これは私の検索コントローラです:

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 

これは私のindex.html.erbです:

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

これは私の部分であります_search.html.erb:

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

そして最後に、私のindex.js.erb:

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

私は解決策を身近に感じ、なぜ? default_filter_paramsを 'created_at_desc'から 'created_at_asc'に変更しています。また、オプション選択リストは自動的に '作成日時(Oldest first)'に変更されます。しかし、オプションを変更すると、スピナーが1秒間表示される以外は何も起こりません。

ありがとうございました!

+0

私はAJAXのオートフォームを送信し、それは次のリンクになり提出ヒット無効にすると:? 検索UTF8 =%E2%9C%93&filterrific%5Bsorted_by%5D = created_at_asc&コミット=問題を見つけるのに役立ちますフィルター mabye !? – Eckenmeyer

答えて

0

私自身が解決策を見つけました。私は:sorted_byを検索コントローラに追加しました。

関連する問題