Rails с Filterrific не работает

Я не получаю фильтра для работы, хотя чувствую, что действительно близок к решению. В моем приложении вы можете создавать поисковые запросы для продуктов, на которые могут ответить другие люди. Теперь я хочу реализовать filterrific для сортировки (а позже и фильтрации) этих поисковых запросов. Я просмотрел блестящую документацию на http://filterrific.clearcove.ca/, но не нашел причины, по которой это не работает в моем приложении. Я не получаю никаких ошибок, но что бы я ни делал, это не сортировка.

Это моя модель поиска:

    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» работает. А также список выбора опций затем автоматически меняется на «создано в (сначала самые старые)». Но когда я меняю выбор опции, ничего не происходит, кроме того, что счетчик появляется на секунду.

Спасибо за любую помощь!


person Eckenmeyer    schedule 24.07.2016    source источник
comment
Когда я отключаю форму автоматической отправки AJAX и нажимаю «Отправить», это приводит к следующей ссылке: searches?utf8=%E2%9C%93&filterrific%5Bsorted_by%5D=created_at_asc&commit=Filter, может быть, это поможет найти проблему!?   -  person Eckenmeyer    schedule 24.07.2016


Ответы (1)


Я только что нашел решение сам. Я добавил :sorted_by в контроллер поиска.

person Eckenmeyer    schedule 24.07.2016