2016-07-24 3 views
0

저는 솔루션에 매우 가깝다고 느낍니다. 내 앱에서는 다른 사람들이 대답 할 수있는 제품에 대한 검색 요청을 만들 수 있습니다. 이제 filterrific을 구현하여 이러한 검색 요청을 정렬 (및 나중에 필터링)하기를 원합니다. http://filterrific.clearcove.ca/에 대한 훌륭한 문서를 따라 갔지만 내 응용 프로그램에서 작동하지 않는 이유를 찾지 못했습니다. 어떤 오류도 발생하지 않지만 내가하는 일은 정렬되지 않습니다.Filterrific이있는 레일즈가 작동하지 않습니다.

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

이 내 부분입니다 :

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입니다 : 이것은 내 검색 컨트롤러

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 

:

내 검색 모델 _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'로 변경하는 중입니다. 또한 옵션 선택 목록이 자동으로 '생성 일 (오래된 항목부터)'으로 변경됩니다. 그러나 옵션을 변경하면 스피너가 1 초 동안 표시된다는 것 외에는 아무 것도 일어나지 않습니다.

도움 주셔서 감사합니다.

+0

나는 AJAX 자동이 양식을 제출하고 다음 링크에서 결과를 제출 명중하지 않도록 설정하면 : 검색 UTF8 = % E2 % 9C % 93 & filterrific % 5Bsorted_by % 5D = created_at_asc 및 커밋 문제를 찾는 데 도움이 = 필터 mabye !? – Eckenmeyer

답변

0

방금 ​​솔루션을 직접 찾았습니다. 검색 컨트롤러에 :sorted_by을 추가했습니다.

관련 문제