SlideShare a Scribd company logo
Filtering,	Searching,	and	Sor1ng	
Ac1veRecord	Lists	Using	Filterrific	
Waihon	Yew	
GitHub	(waihon)	
TwiCer	(@waihon)
Searching	for	a	Gem
What	Does	Filterrific	Provide?	
•  Let	your	app's	users	search,	filter	and	sort	lists	of	
Ac1veRecord	objects.	
•  Persist	filter	seOngs	in	the	HTTP	session	or	DB.	
•  Integrates	with	pagina(on	(will_paginate	or	
kaminari).	
•  Reset	filter	to	default	seOngs.	
•  Relies	on	Ac1veRecord	scopes.	
•  ShuCles	filter	seOngs	from	a	filter	UI	to	the	
controller	and	Ac1veRecord.	
•  Can	be	used	for	HTML/JSON/JS/XML	response	
formats.	
•  Documenta1on:	hCp://filterrific.clearcove.ca/
Dependencies	
•  Rails	and	Ac1veRecord	3.x	and	above.	
•  jQuery	and	asset	pipeline	for	form	observers	
and	spinner.
What	You	Have	To	Do?	
1.  Define	Ac1veRecord	scopes.	
2.  Build	and	style	your	filter	form	and	record	
lists.
•  A	web	app	that	stores	basic	informa1on	of	
students.	
Demo	App	-	ERD	
has_many	
belongs_to
Demo	App	–	Base	
	
hCps://github.com/jhund/filterrific_demo	
hCp://filterrific-demo.herokuapp.com/
Demo	App	–	Enhanced	
hCps://github.com/waihon/filterrific_demo
Short	Demo	of	the	Enhanced	App
Gemfile	
gem "filterrific"
View	
•  Display	the	form	to	update	filter	seOngs.	
•  Display	the	list	of	matching	records.	
•  Update	the	filter	seOngs	via	AJAX	form	
submission.	
•  Reset	the	filter	seOngs.	
•  Filterrific	works	best	with	AJAX	updates.		
•  The	library	comes	with	form	observers	for	
jQuery	and	an	AJAX	spinner.
View	Components
View	Components	
index.html	
This	is	the	main	template	for	the	
students	list.		
It	is	rendered	on	first	load.
View	Components	
index.html	
																				students/_list.html	
This	par1al	renders	the	actual	list	of	
students.		
It’s	extracted	into	a	par1al	so	that	it	can	
be	updated	via	AJAX	response.
View	Components	
index.html	
																				students/_list.html	
form_for_filterrific	
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	op1ons	like	:url,	:method	and	input	
name	prefix
View	Components	
index.html	
																				students/_list.html	
form_for_filterrific	
Give	the	search	field	the	
'filterrific-periodically-observed'	
class	for	live	updates.
View	Components	
index.html	
																				students/_list.html	
form_for_filterrific	
index.js	
This	JavaScript	updates	the	students	
list	aher	the	filter	seOngs	were	
changed.
View	Components	
index.html	
																				students/_list.html	
form_for_filterrific	
index.js	
Searches/_modal_form.html	
Display	a	modal	form	for	saving	
filter	seOngs.
View	Components	
index.html	
																				students/_list.html	
form_for_filterrific	
index.js	
searches/_list.html
View	Components	
index.html	
																				students/_list.html	
form_for_filterrific	
index.js	
searches/_list.html	
Reset	filter	seOngs	to	the	defaults	
defined	in	the	model	or	overriden	in	
the	controller	(reset_filterrific_url).
Sort	by	Column	Title	
Filterrific	provides	sortable	column	header	links	which	
toggle	sort	direc1on	with	the	filterrific_sor1ng_link()	
method.
Sort	by	Column	Title	
The	method	must	be	placed	in	the	_list.html	view	par1al:	
<th><%= filterrific_sorting_link(@filterrific, :name) %></th>
The	filterrific_sor1ng_link	method	is	expec1ng	a	sorted_by	scope	which	
contains	the	column	headers	and	the	model	aCribute	to	sort	by.		
Column	headers	are	automa1cally	capitalized.	
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_/
order("students.created_at #{ direction }")
when /^name_/
order("LOWER(students.last_name) #{ direction },
LOWER(students.first_name) #{ direction }")
when /^country_name_/
order("countries.name #{ direction }").includes(:country)
else
raise(ArgumentError, "Invalid sort option: #{ sort_option.inspect }")
end
}
Sort	by	Column	Title
Disable	AJAX	Auto	Form	Submits	
•  By	default	Filterrific	will	automa1cally	submit	the	filter	
form	as	soon	as	we	change	any	of	the	filter	seOngs.		
•  Some1mes	you	may	not	want	this	behavior,	e.g.,	if	the	
rendering	of	the	filtered	records	is	fairly	expensive.	
•  The	auto	submit	behavior	is	triggered	by	the	filter	
form's	id	which	is	automa1cally	added	by	the	
form_for_filterrific	helper	method.		
•  In	order	to	deac1vate	AJAX	auto	submits	
–  Override	the	DOM	id	for	the	form	with	something	other	
than	the	default	of	filterrific_filter.		
–  Add	the	remote:	true	op1on	to	form_for_filterrific	
–  Don't	add	the	.filterrific-periodically-observed	class	to	any	
inputs.		
–  Add	a	regular	submit	buCon
Disable	AJAX	Auto	Form	Submits	
•  By	default	Filterrific	will	automa1cally	submit	the	filter	
form	as	soon	as	we	change	any	of	the	filter	seOngs.		
•  Some1mes	you	may	not	want	this	behavior,	e.g.,	if	the	
rendering	of	the	filtered	records	is	fairly	expensive.	
•  The	auto	submit	behavior	is	triggered	by	the	filter	
form's	id	which	is	automa1cally	added	by	the	
form_for_filterrific	helper	method.		
•  In	order	to	deac1vate	AJAX	auto	submits	
–  Override	the	DOM	id	for	the	form	with	something	other	
than	the	default	of	filterrific_filter.		
–  Add	the	remote:	true	op1on	to	form_for_filterrific	
–  Don't	add	the	.filterrific-periodically-observed	class	to	any	
inputs.		
–  Add	a	regular	submit	buCon	
If	you	s1ll	want	to	submit	the	form	via	AJAX	(just	not	
automa1cally	on	every	change).		
Otherwise	the	form	will	be	submiCed	as	regular	POST	
request	and	the	en1re	page	will	reload.
Disable	AJAX	Auto	Form	Submits	
•  By	default	Filterrific	will	automa1cally	submit	the	filter	
form	as	soon	as	we	change	any	of	the	filter	seOngs.		
•  Some1mes	you	may	not	want	this	behavior,	e.g.,	if	the	
rendering	of	the	filtered	records	is	fairly	expensive.	
•  The	auto	submit	behavior	is	triggered	by	the	filter	
form's	id	which	is	automa1cally	added	by	the	
form_for_filterrific	helper	method.		
•  In	order	to	deac1vate	AJAX	auto	submits	
–  Override	the	DOM	id	for	the	form	with	something	other	
than	the	default	of	filterrific_filter.		
–  Add	the	remote:	true	op1on	to	form_for_filterrific	
–  Don't	add	the	.filterrific-periodically-observed	class	to	any	
inputs.		
–  Add	a	regular	submit	buCon	
<%= form_for_filterrific @filterrific, remote: true
html: { id: 'filterrific-no-ajax-auto-submit' } do |f| %>
...
<%= f.submit 'Filter' %>
<% end %>
Model	–	Add	filterrific	Direc1ve	
# student.rb
Filterrific(
default_filter_params:
{ sorted_by: 'created_at_desc' },
available_filters: [
:sorted_by,
:search_query,
:with_country_id,
:with_created_at_gte
]
)	
Define	default	filter	seOngs	
Specify	which	scopes	are	available	to	
Filterrific.	
This	is	a	safety	mechanism	to	prevent	
unauthorized	access	to	your	database.	
It’s	like	strong	parameters,	just	for	
filter	seOngs.	
Enable	Filterrific	for	the	Student	class
Model	–	Define	Select	Op1ons	
# student.rb
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
# country.rb
def self.options_for_select
order('LOWER(name)').map { |e| [e.name, e.id] }
end
These	class	methods	
provide	op1ons	for	
select	drop-down	and	
are	called	in	the	
controller	as	part	of	
ini1alize_filterrific.
Model	–	Define	Scopes	
scope :sorted_by, -> { |sort_key|
# Sort students by sort_key
direction = (sort_key =~ /desc$/) ? 'desc' : 'asc’
...
}
scope :search_query, -> { |query|
# Filters students that matches the query
...
}
scope :with_country_id, -> { |country_ids|
# Filters students with any of the given country_ids
where(:country_id => [*country_ids])
}
scope :with_created_at_gte, -> { |ref_date|
# Filter students whom registered from the given date
where('students.created_at >= ?',
Date.strptime(ref_date, "%m/%d/%Y"))
}
Model	–	Define	Scopes	
scope :sorted_by, -> { |sort_key|
# Sort students by sort_key
direction = (sort_key =~ /desc$/) ? 'desc' : 'asc’
...
}
scope :search_query, -> { |query|
# Filters students that matches the query
...
}
scope :with_country_id, -> { |country_ids|
# Filters students with any of the given country_ids
where(:country_id => [*country_ids])
}
scope :with_created_at_gte, -> { |ref_date|
# Filter students whom registered from the given date
where('students.created_at >= ?',
Date.strptime(ref_date, "%m/%d/%Y"))
}	
Filterrific	relies	heavily	on	Ac1veRecord	scopes	for	filtering,	so	it	is	
important	that	you	are	familiar	with	how	to	use	scopes.	
hCp://filterrific.clearcove.ca/pages/ac1ve_record_scope_paCerns.html
Filterrific	Ac1onController	
•  Ini1alize	filter	seOngs	from	params,	
persistence	or	defaults.	
•  Execute	the	Ac1veRecord	query	to	load	the	
filtered	records.	
•  Send	the	Ac1veRecord	collec1on	to	the	view	
for	rendering.	
•  Persist	the	current	filter	seOngs.	
•  Reset	the	filter	seOngs.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
Filterrific	lives	in	the	controller’s	index	ac1on.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
An	Ac1veRecord-based	model	class.	
It	can	also	be	an	Ac1veRecord	rela1on.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
Any	params	submiCed	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	seOngs.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
Store	any	op1ons	for	<select>	inputs	in	the	
form.	
The	key	refers	to	scope	name	defined	in	the	
model	
The	value	refers	to	method	defined	in	the	
model	that	return	an	array	of	op1ons
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
Defaults	to	"<controller>#<ac1on>"	string	
to	isolate	session	persistence	of	mul1ple	
filterrific	instances.	
Override	this	to	share	session	persisted	
filter	params	between	mul1ple	filterrific	
instances.		
Set	to	false	to	disable	session	persistence.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
To	override	model	defaults
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
To	further	restrict	which	filters	are	
in	this	filterrific	instance.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
This	method	also	persists	the	
params	in	the	session	and	handles	
reseOng	the	filterrific	params.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
In	order	for	reset_filterrific	to	work,	it’s	
important	that	we	add	the	'or	return'	bit	
aher	the	call	to	'ini1alize_filterrific'.	
Otherwise	the	redirect	will	not	work.
Controller	–	ini1alize_filterrific	
# students_controller.rb
def index
@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: [],
) or return
@students = @filterrific.find.page(params[:page])
...
end	
This	method	also	persists	the	
params	in	the	session	and	handles	
reseOng	the	filterrific	params.	
Returns	an	Ac1veRecord	rela1on	
for	all	records	that	match	the	
filter	seOngs.	
We	can	paginate	with	
will_paginate	or	kaminari.	
The	rela1on	returned	can	be	
chained	with	other	scopes	to	
further	narrow	down	the	scope	of	
the	list,	e.g.,	to	apply	permissions	
or	to	exclude	certain	types	of	
records.
Saved	Searches	
•  @search.filter	=	session["shared_key"]	
•  @search.filter	=	session["students#index"]	
{"sorted_by"=>"created_at_asc",
"with_country_id"=>7,
"with_created_at_gte"=> "01/01/2016"}
Saved	Searches	
•  @search.filter	=	session["shared_key"]	
•  @search.filter	=	session["students#index"]	
{"sorted_by"=>"created_at_asc",
"with_country_id"=>7,
"with_created_at_gte"=> "01/01/2016"}
This	key	is	the	:persistence_id	
defined	in	the	call	to	
ini1alize_filteerrific	
This	key	is	the	:persistence_id	
defined	in	the	call	to	
ini1alize_filterrific
Ini1alize	Persisted	Filter	SeOngs	
•  In	the	call	to	ini1alize_filterrific,	replace	
params[:filterrific]	with	a	method	call.	
def filter_settings
if params[:filterrific].present?
params[:filterrific]
elsif params[:search_id].present?
search = Search.find_by(id: params[:search_id])
search ? eval(search.filter) :
Student.default_filter_params
else
Student.default_filter_params
end
end
# students_controller.rb
@filterrific =
initialize_filterrific(
Student,
filter_settings,
...
Ini1alize	Persisted	Filter	SeOngs	
•  In	the	call	to	ini1alize_filterrific,	replace	
params[:filterrific]	with	a	method	call	
def filter_settings
if params[:filterrific].present?
params[:filterrific]
elsif params[:search_id].present?
search = Search.find_by(id: params[:search_id])
search ? eval(search.filter) :
Student.default_filter_params
else
Student.default_filter_params
end
end
#routes.rb
get "/students/search/:search_id",
to: "students#index",
as: "search_students"
Ini1alize	Persisted	Filter	SeOngs	
•  In	the	call	to	ini1alize_filterrific,	replace	
params[:filterrific]	with	a	method	call	
def filter_settings
if params[:filterrific].present?
params[:filterrific]
elsif params[:search_id].present?
search = Search.find_by(id: params[:search_id])
search ? eval(search.filter) :
Student.default_filter_params
else
Student.default_filter_params
end
end
Using	eval	to	convert	the	persisted	
filter	seOngs	from	string	to	hash.
Thank	You	for	Your		
ACen1on	&	Pa1ence!	
Waihon	Yew	
GitHub	(waihon)	
TwiCer	(@waihon)

More Related Content

What's hot

Basic oracle-database-administration
Basic oracle-database-administrationBasic oracle-database-administration
Basic oracle-database-administration
sreehari orienit
 
People soft workflow by surya 2
People soft workflow by surya 2People soft workflow by surya 2
People soft workflow by surya 2meghamystic
 
Oracle Database Multitenant Architecture.pptx
Oracle Database Multitenant Architecture.pptxOracle Database Multitenant Architecture.pptx
Oracle Database Multitenant Architecture.pptx
Hakim Rahimi
 
Complex queries in sql
Complex queries in sqlComplex queries in sql
Complex queries in sql
Charan Reddy
 
Oracle DBA
Oracle DBAOracle DBA
Oracle DBA
shivankuniversity
 
Sql database audit
Sql database auditSql database audit
Sql database audit
Sqlperfomance
 
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
vasuballa
 
Jdbc
Jdbc   Jdbc
Jdbc
Ishucs
 
Oracle sql high performance tuning
Oracle sql high performance tuningOracle sql high performance tuning
Oracle sql high performance tuning
Guy Harrison
 
Understanding index
Understanding indexUnderstanding index
Understanding index
Chien Chung Shen
 
Oracle 12c Multitenant architecture
Oracle 12c Multitenant architectureOracle 12c Multitenant architecture
Oracle 12c Multitenant architecture
naderattia
 
Tanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools short
Tanel Poder
 
New Features for Multitenant in Oracle Database 21c
New Features for Multitenant in Oracle Database 21cNew Features for Multitenant in Oracle Database 21c
New Features for Multitenant in Oracle Database 21c
Markus Flechtner
 
Understanding Oracle GoldenGate 12c
Understanding Oracle GoldenGate 12cUnderstanding Oracle GoldenGate 12c
Understanding Oracle GoldenGate 12c
IT Help Desk Inc
 
Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15
Bobby Curtis
 
Lecture 2. MS SQL. Stored procedures.
Lecture 2. MS SQL. Stored procedures.Lecture 2. MS SQL. Stored procedures.
Lecture 2. MS SQL. Stored procedures.
Alexey Furmanov
 
Microsoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptxMicrosoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptx
samtakke1
 
Why Scala?
Why Scala?Why Scala?
Why Scala?
Alex Payne
 
Oracle EBS to Oracle Service Cloud Integration
Oracle EBS to Oracle Service Cloud IntegrationOracle EBS to Oracle Service Cloud Integration
Oracle EBS to Oracle Service Cloud Integration
Bizinsight Consulting Inc
 

What's hot (20)

Basic oracle-database-administration
Basic oracle-database-administrationBasic oracle-database-administration
Basic oracle-database-administration
 
People soft workflow by surya 2
People soft workflow by surya 2People soft workflow by surya 2
People soft workflow by surya 2
 
Oracle Database Multitenant Architecture.pptx
Oracle Database Multitenant Architecture.pptxOracle Database Multitenant Architecture.pptx
Oracle Database Multitenant Architecture.pptx
 
Complex queries in sql
Complex queries in sqlComplex queries in sql
Complex queries in sql
 
Oracle DBA
Oracle DBAOracle DBA
Oracle DBA
 
Sql database audit
Sql database auditSql database audit
Sql database audit
 
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
OOW16 - Oracle Enterprise Manager 13c Cloud Control for Managing Oracle E-Bus...
 
Jdbc
Jdbc   Jdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Oracle sql high performance tuning
Oracle sql high performance tuningOracle sql high performance tuning
Oracle sql high performance tuning
 
Understanding index
Understanding indexUnderstanding index
Understanding index
 
Oracle 12c Multitenant architecture
Oracle 12c Multitenant architectureOracle 12c Multitenant architecture
Oracle 12c Multitenant architecture
 
Tanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools short
 
New Features for Multitenant in Oracle Database 21c
New Features for Multitenant in Oracle Database 21cNew Features for Multitenant in Oracle Database 21c
New Features for Multitenant in Oracle Database 21c
 
Understanding Oracle GoldenGate 12c
Understanding Oracle GoldenGate 12cUnderstanding Oracle GoldenGate 12c
Understanding Oracle GoldenGate 12c
 
Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15
 
Lecture 2. MS SQL. Stored procedures.
Lecture 2. MS SQL. Stored procedures.Lecture 2. MS SQL. Stored procedures.
Lecture 2. MS SQL. Stored procedures.
 
Microsoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptxMicrosoft SQL Server Database Administration.pptx
Microsoft SQL Server Database Administration.pptx
 
Why Scala?
Why Scala?Why Scala?
Why Scala?
 
Oracle EBS to Oracle Service Cloud Integration
Oracle EBS to Oracle Service Cloud IntegrationOracle EBS to Oracle Service Cloud Integration
Oracle EBS to Oracle Service Cloud Integration
 

Similar to Filtering, Searching, and Sorting ActiveRecord Lists Using Filterrific

Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Kai Chan
 
Apache Solr crash course
Apache Solr crash courseApache Solr crash course
Apache Solr crash courseTommaso Teofili
 
Calypso underhood
 Calypso underhood Calypso underhood
Calypso underhood
ESUG
 
S313431 JPA 2.0 Overview
S313431 JPA 2.0 OverviewS313431 JPA 2.0 Overview
S313431 JPA 2.0 Overview
Ludovic Champenois
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
Fu Cheng
 
NEMROD : Symfony2 components to work with native RDF
NEMROD : Symfony2 components to work with native RDFNEMROD : Symfony2 components to work with native RDF
NEMROD : Symfony2 components to work with native RDF
Conjecto
 
The openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query LanguageThe openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query Language
Neo4j
 
AAT LOD Microthesauri
AAT LOD MicrothesauriAAT LOD Microthesauri
AAT LOD Microthesauri
Marcia Zeng
 
springdatajpa-up.pdf
springdatajpa-up.pdfspringdatajpa-up.pdf
springdatajpa-up.pdf
ssuser0562f1
 
DSpace 4.2 Transmission: Import/Export
DSpace 4.2 Transmission: Import/ExportDSpace 4.2 Transmission: Import/Export
DSpace 4.2 Transmission: Import/ExportDuraSpace
 
Apache Solr Workshop
Apache Solr WorkshopApache Solr Workshop
Apache Solr WorkshopJSGB
 
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdfASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
setit72024
 
Using the latest Java Persistence API 2.0 features
Using the latest Java Persistence API 2.0 featuresUsing the latest Java Persistence API 2.0 features
Using the latest Java Persistence API 2.0 featuresArun Gupta
 
Understanding
Understanding Understanding
Understanding Arun Gupta
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
Sperasoft
 
Multi faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & loggingMulti faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & logging
lucenerevolution
 
Resource Routing in ExpressionEngine
Resource Routing in ExpressionEngineResource Routing in ExpressionEngine
Resource Routing in ExpressionEngine
MichaelRog
 
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve contentOpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
Alkacon Software GmbH & Co. KG
 

Similar to Filtering, Searching, and Sorting ActiveRecord Lists Using Filterrific (20)

Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
 
Apache Solr crash course
Apache Solr crash courseApache Solr crash course
Apache Solr crash course
 
Calypso underhood
 Calypso underhood Calypso underhood
Calypso underhood
 
S313431 JPA 2.0 Overview
S313431 JPA 2.0 OverviewS313431 JPA 2.0 Overview
S313431 JPA 2.0 Overview
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
 
NEMROD : Symfony2 components to work with native RDF
NEMROD : Symfony2 components to work with native RDFNEMROD : Symfony2 components to work with native RDF
NEMROD : Symfony2 components to work with native RDF
 
The openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query LanguageThe openCypher Project - An Open Graph Query Language
The openCypher Project - An Open Graph Query Language
 
Elastic tire demo
Elastic tire demoElastic tire demo
Elastic tire demo
 
AAT LOD Microthesauri
AAT LOD MicrothesauriAAT LOD Microthesauri
AAT LOD Microthesauri
 
springdatajpa-up.pdf
springdatajpa-up.pdfspringdatajpa-up.pdf
springdatajpa-up.pdf
 
DSpace 4.2 Transmission: Import/Export
DSpace 4.2 Transmission: Import/ExportDSpace 4.2 Transmission: Import/Export
DSpace 4.2 Transmission: Import/Export
 
Logstash
LogstashLogstash
Logstash
 
Apache Solr Workshop
Apache Solr WorkshopApache Solr Workshop
Apache Solr Workshop
 
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdfASP.NET MVC_Routing_Authentication_Aurhorization.pdf
ASP.NET MVC_Routing_Authentication_Aurhorization.pdf
 
Using the latest Java Persistence API 2.0 features
Using the latest Java Persistence API 2.0 featuresUsing the latest Java Persistence API 2.0 features
Using the latest Java Persistence API 2.0 features
 
Understanding
Understanding Understanding
Understanding
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
 
Multi faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & loggingMulti faceted responsive search, autocomplete, feeds engine & logging
Multi faceted responsive search, autocomplete, feeds engine & logging
 
Resource Routing in ExpressionEngine
Resource Routing in ExpressionEngineResource Routing in ExpressionEngine
Resource Routing in ExpressionEngine
 
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve contentOpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
OpenCms Days 2012 - OpenCms 8.5: Using Apache Solr to retrieve content
 

Recently uploaded

Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
abdulrafaychaudhry
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
vrstrong314
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 

Recently uploaded (20)

Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 

Filtering, Searching, and Sorting ActiveRecord Lists Using Filterrific