Skip to content

Instantly share code, notes, and snippets.

@j0ni
Created March 2, 2016 22:10
Show Gist options
  • Save j0ni/373c707f747957e9ca4d to your computer and use it in GitHub Desktop.
Save j0ni/373c707f747957e9ca4d to your computer and use it in GitHub Desktop.
Notes for Jacob
<form method="post" action="/movies/index">
<label>Runtime</label>
<select name="runtime">
<option value="0">Under 90 minutes</option>
<option value="1">Between 90 and 120 minutes</option>
<option value="2">Over 120 minutes</option>
</select>
<label>Title</label>
<input type="text" name="title">
<label>Director</label>
<input type="text" name="director">
<input type="submit" value="Submit">
</form>
class MoviesController < ApplicationController
def index
queries = []
queries << [:title, params[:title]] if params[:title]
queries << [:director, params[:director]] if params[:director]
queries << [:runtime, params[:runtime]] if params[:runtime]
# [[:title, "Mad Max"], [:runtime, "0"]]
if queries.empty?
@movies = Movies.all
else
@movies = Movies.search(queries)
end
end
end
class Movie < ActiveRecord::Base
RUNTIME_QUERIES = ["runtime_in_minutes <= 90"
"runtime_in_minutes > 90 and runtime_in_minutes <= 120"
"runtime_in_minutes > 120"]
class << self
def query_for(query)
search_type, term = query
case type
when :title
["title LIKE ?", "%#{term}%"]
when :director
["director LIKE ?", "%#{term}%"]
when :runtime
RUNTIME_QUERIES[term.to_i]
end
end
def search(queries)
results = Movie.none
queries.each do |tuple|
results = results.where(query_for(tuple))
end
results
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment