2016-12-17 58 views
1

我是一個相對新手與軌道,我試圖使用filterrific寶石進行一些過濾。基本上我有索引頁面顯示供應商列表,我希望能夠使用篩選來主動篩選/排序記錄。我能夠完成教程並解決了所有錯誤,但由於某種原因,當您將數據輸入到表單中時,沒有任何反應。它根本不會令人耳目一新。有什麼想法我做錯了什麼?Filterrific寶石不刷新或按預期過濾我的表

供應商型號:

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

    scope :search_query, lambda { |query| 

     return nil if query.blank? 
     terms = query.downcase.split(/\s+/) 

     terms = terms.map { |e| 
     (e.gsub('*', '%') + '%').gsub(/%+/, '%') 
     } 

     num_or_conds = 2 
     where(
     terms.map { |term| 
      "(LOWER(vendors.name) LIKE ? OR LOWER(vendors.bio) LIKE ?)" 
     }.join(' AND '), 
     *terms.map { |e| [e] * num_or_conds }.flatten 
    ) 
    } 

    scope :sorted_by, lambda { |sort_option| 

    direction = (sort_option =~ /desc$/) ? 'desc' : 'asc' 
     case sort_option.to_s 
     when /^created_at_/ 
     order("vendors.created_at #{ direction }") 
     when /^name_/ 
     order("LOWER(vendors.name) #{ direction }, LOWER(students.bio) #{ direction }") 
     when /^vendor_type_title_/ 
     order("LOWER(vnedor_types.title) #{ direction }").includes(:vendor_type) 
     else 
     raise(ArgumentError, "Invalid sort option: #{ sort_option.inspect }") 
     end 
    } 

    scope :with_vendor_type_id, lambda { |vendor_type_ids| 
     where(with_vendor_type_id: [*vendor_type_ids]) 
    } 

    scope :created_at_gte, lambda { |reference_time| 
     where('vendors.created_at >= ?', reference_time) 
    } 


    def self.options_for_sorted_by 
    [ 
     ['Name (a-z)', 'name_asc'], 
     ['Registration date (newest first)', 'created_at_desc'], 
     ['Registration date (oldest first)', 'created_at_asc'], 
     ['Type(a-z)', 'vendor_type_id_asc'] 
    ] 
    end 

我的供應商控制器

def index 

    @filterrific = initialize_filterrific(
     Vendor, 
     params[:filterrific], 
     select_options: { 
     sorted_by: Vendor.options_for_sorted_by, 
     with_vendor_type_id: VendorType.options_for_select 
     }, 
     persistence_id: 'shared_key', 
     default_filter_params: {}, 
     available_filters: [], 
    ) or return 

    @vendors = @filterrific.find.page(params[:page]) 

    # Respond to html for initial page load and to js for AJAX filter updates. 
    respond_to do |format| 
     format.html 
     format.js 
    end 

    rescue ActiveRecord::RecordNotFound => e 
    puts "Had to reset filterrific params: #{ e.message }" 
    redirect_to(reset_filterrific_url(format: :html)) and return 
    end 

我的索引視圖

<h1>Vendors</h1> 

<%= form_for_filterrific @filterrific do |f| %> 
    <div> 
    Search 
    <%= f.text_field(
     :search_query, 
     class: 'filterrific-periodically-observed' 
    ) %> 
    </div> 
    <div> 
    Vendor Type 
    <%= f.select(
     :with_vendor_type_id, 
     @filterrific.select_options[:with_vendor_type_id], 
     { include_blank: '- Any -' } 
    ) %> 
    </div> 
    <div> 
    Registered after 
    <%= f.text_field(:with_created_at_gte, class: 'js-datepicker') %> 
    </div> 
    <div> 
    Sorted by 
    <%= f.select(:sorted_by, @filterrific.select_options[:sorted_by]) %> 
    </div> 
    <div> 
    <%= link_to(
     'Reset filters', 
     reset_filterrific_url, 
    ) %> 
    </div> 
<% end %> 

<%= render(
    partial: 'vendors/list', 
    locals: { vendors: @vendors } 
) %> 

我偏

<div id="filterrific_results"> 

    <div> 
    <%= page_entries_info vendors %> 
    </div> 

    <table> 
    <tr> 
     <th>Name</th> 
     <th>User ID</th> 
     <th>Country</th> 
     <th>Registered at</th> 
    </tr> 
    <% vendors.each do |vendor| %> 
     <tr> 
     <td><%= link_to(vendor.name, vendor_path(vendor)) %></td> 
     <td><%= vendor.user_id %></td> 
     <td><%= vendor.vendor_type %></td> 
     <td><%= vendor.created_at %></td> 
     </tr> 
    <% end %> 
    </table> 
</div> 

<%= will_paginate vendors %> 

JS文件

<%# app/views/vendor/index.js.erb %> 
<% js = escape_javascript(
    render(partial: 'vendors/list', locals: { vendors: @vendors }) 
) %> 
$("#filterrific_results").html("<%= js %>"); 

我到哪裏了從渲染點,並獲得過去所有的錯誤信息,但它只是沒有真正做的過濾。

回答

0

在'app/assets/javascripts/application.js'中包含//= require filterrific/filterrific-jquery'

+0

這不是一個答案。應該是一個評論。 – TharinduLucky

+0

我還不能評論:/ –