Created
March 2, 2016 22:10
-
-
Save j0ni/373c707f747957e9ca4d to your computer and use it in GitHub Desktop.
Notes for Jacob
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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