Я попытался добавить гем 'filterrifi c' в моем приложении Ruby на Rails, и я не нашел способа добавить средство выбора даты, например, демо: http://filterrific-demo.herokuapp.com/students
Я полагаю, что есть другой гем или js framework / library для добавления datepicker, я вижу класс: 'js -datepicker' во входных данных, но я не нахожу код js.
Ничего в вики или в readme.
Вот представление:
<%# app/views/students/index.html.erb %>
<h1>Students</h1>
<%#
Filterrific adds the `form_for_filterrific` view helper:
* adds dom id 'filterrific_filter'
* applies javascript behaviors:
* AJAX form submission on change
* AJAX spinner while AJAX request is being processed
* sets form_for options like :url, :method and input name prefix
%>
<%= form_for_filterrific @filterrific do |f| %>
<div>
Search
<%# give the search field the 'filterrific-periodically-observed' class for live updates %>
<%= f.text_field(
:search_query,
class: 'filterrific-periodically-observed'
) %>
</div>
<div>
Country
<%= f.select(
:with_country_id,
@filterrific.select_options[:with_country_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>
<%# add an automated spinner to your form when the list is refreshed %>
<%= render_filterrific_spinner %>
<% end %>
<%= render(
partial: 'students/list',
locals: { students: @students }
) %>
контроллер:
class StudentsController < ApplicationController
def index
# Initialize filterrific with the following params:
# * `Student` is the ActiveRecord based model class.
# * `params[:filterrific]` are any params submitted via web request.
# If they are blank, filterrific will try params persisted in the session
# next. If those are blank, too, filterrific will use the model's default
# filter settings.
# * Options:
# * select_options: You can store any options for `<select>` inputs in
# the filterrific form here. In this example, the `#options_for_...`
# methods return arrays that can be passed as options to `f.select`
# These methods are defined in the model.
# * persistence_id: optional, defaults to "<controller>#<action>" string
# to isolate session persistence of multiple filterrific instances.
# Override this to share session persisted filter params between
# multiple filterrific instances. Set to `false` to disable session
# persistence.
# * default_filter_params: optional, to override model defaults
# * available_filters: optional, to further restrict which filters are
# in this filterrific instance.
# * sanitize_params: optional, defaults to `true`. If true, all filterrific
# params will be sanitized to prevent reflected XSS attacks.
# This method also persists the params in the session and handles resetting
# the filterrific params.
# In order for reset_filterrific to work, it's important that you add the
# `or return` bit after the call to `initialize_filterrific`. Otherwise the
# redirect will not work.
@filterrific = initialize_filterrific(
Student,
params[:filterrific],
select_options: {
sorted_by: Student.options_for_sorted_by,
with_country_id: Country.options_for_select,
},
persistence_id: "shared_key",
default_filter_params: {},
available_filters: [:sorted_by, :with_country_id],
sanitize_params: true,
) || return
# Get an ActiveRecord::Relation for all students that match the filter settings.
# You can paginate with will_paginate or kaminari.
# NOTE: filterrific_find returns an ActiveRecord Relation that can be
# chained with other scopes to further narrow down the scope of the list,
# e.g., to apply permissions or to hard coded exclude certain types of records.
@students = @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
# Recover from invalid param sets, e.g., when a filter refers to the
# database id of a record that doesn’t exist any more.
# In this case we reset filterrific and discard all filter params.
rescue ActiveRecord::RecordNotFound => e
# There is an issue with the persisted param_set. Reset it.
puts "Had to reset filterrific params: #{e.message}"
redirect_to(reset_filterrific_url(format: :html)) && return
end
...
end
модель:
class Student < ActiveRecord::Base
# db columns:
# integer: id
# string: first_name
# string: last_name
# text: email
# integer: country_id
# datetime: created_at
# This directive enables Filterrific for the Student class.
# We define a default sorting by most recent sign up, and then
# we make a number of filters available through Filterrific.
filterrific(
default_filter_params: { sorted_by: "created_at_desc" },
available_filters: [
:sorted_by,
:search_query,
:with_country_id,
:with_created_at_gte,
],
)
# ActiveRecord association declarations
belongs_to :country
# Scope definitions. We implement all Filterrific filters through ActiveRecord
# scopes. In this example we omit the implementation of the scopes for brevity.
# Please see 'Scope patterns' for scope implementation details.
scope :search_query, ->(query) {
# Filters students whose name or email matches the query
...
}
scope :sorted_by, ->(sort_key) {
# Sorts students by sort_key
...
}
scope :with_country_id, ->(country_ids) {
where(country_id: [*country_ids])
}
scope :with_created_at_gte, ->(ref_date) {
...
}
# This method provides select options for the `sorted_by` filter select input.
# It is called in the controller as part of `initialize_filterrific`.
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"],
["Country (a-z)", "country_name_asc"],
]
end
end