Add searching to the games controller
authorIra W. Snyder <devel@irasnyder.com>
Thu, 22 Nov 2007 06:21:54 +0000 (22:21 -0800)
committerIra W. Snyder <devel@irasnyder.com>
Thu, 22 Nov 2007 06:21:54 +0000 (22:21 -0800)
This adds searching to the games controller, and adds an id and checkedout
column to the list and search views.

Signed-off-by: Ira W. Snyder <devel@irasnyder.com>
app/controllers/game_controller.rb
app/models/coitem.rb
app/models/game.rb
app/views/coitem/_form.rhtml
app/views/game/list.rhtml
app/views/game/searchbyname.rhtml [new file with mode: 0644]
app/views/game/searchresults.rhtml [new file with mode: 0644]
db/development.sqlite3

index 175a63f..39f5485 100644 (file)
@@ -48,4 +48,13 @@ class GameController < ApplicationController
     Game.find(params[:id]).destroy
     redirect_to :action => 'list'
   end
+
+  def searchbyname
+    render :action => 'searchbyname'
+  end
+
+  def searchresults
+    query = params[:q]
+    @games = Game.find(:all, :conditions => ["title = ?", query])
+  end
 end
index a6bc1ad..8513465 100644 (file)
@@ -2,11 +2,24 @@ class Coitem < ActiveRecord::Base
   belongs_to :customer
   belongs_to :rentable
 
+  # Make sure the user typed in the ids
   validates_presence_of :customer_id
   validates_presence_of :rentable_id
 
+  # Make sure the user typed in numbers
+  validates_numericality_of :customer_id
+  validates_numericality_of :rentable_id
+
+  # Make sure this rentable was not already checked out
   validates_uniqueness_of :rentable_id
 
+  # Make sure the associated rentable and customer are valid and exist
   validates_associated :customer
   validates_associated :rentable
+
+  protected
+  def validate
+    errors.add(:customer_id, "does not exist is the database") if customer.nil?
+    errors.add(:rentable_id, "does not exist in the database") if rentable.nil?
+  end
 end
index 4991aa9..4c5d38c 100644 (file)
@@ -1,4 +1,8 @@
 class Game < Rentable
   validates_presence_of :game_genre
   validates_presence_of :platform
+
+  def checkedout?
+    return Coitem.find_by_id(self.id) ? true : false
+  end
 end
index 6cf12a5..2946273 100644 (file)
@@ -1,11 +1,11 @@
 <%= error_messages_for 'coitem' %>
 
 <!--[form:coitem]-->
-<p><label for="coitem_customer_id">Customer</label><br/>
-<%= select 'coitem', 'customer_id', Customer.find(:all).collect {|c| [c.name.to_s, c.id] } %></p>
+<p><label for="coitem_customer_id">Customer ID</label><br/>
+<%= text_field 'coitem', 'customer_id' %></p>
 
-<p><label for="coitem_rentable_id">Rentable</label><br/>
-<%= select 'coitem', 'rentable_id', Rentable.find(:all).collect {|r| [r.title.to_s, r.id] } %></p>
+<p><label for="coitem_rentable_id">Rentable ID</label><br/>
+<%= text_field 'coitem', 'rentable_id' %></p>
 
 <p><label for="coitem_out_date">Out date</label><br/>
 <%= date_select 'coitem', 'out_date'  %></p>
index f1317de..1a17dbf 100644 (file)
@@ -2,6 +2,8 @@
 
 <table>
   <tr>
+  <th>Game ID</th>
+  <th>Checked Out</th>
   <% for column in Game.content_columns %>
     <th><%= column.human_name %></th>
   <% end %>
@@ -9,6 +11,8 @@
   
 <% for game in @games %>
   <tr>
+  <td><%=h game.id %></td>
+  <td><%=h game.checkedout? %></td>
   <% for column in Game.content_columns %>
     <td><%=h game.send(column.name) %></td>
   <% end %>
diff --git a/app/views/game/searchbyname.rhtml b/app/views/game/searchbyname.rhtml
new file mode 100644 (file)
index 0000000..a5a4f8b
--- /dev/null
@@ -0,0 +1,8 @@
+<h1>Search for a Game by Name</h1>
+
+<%= start_form_tag :action => 'searchresults'%>
+<%= text_field 'q', nil  %>
+  <%= submit_tag 'Search' %></form>
+<%= end_form_tag %>
+
+<br />
diff --git a/app/views/game/searchresults.rhtml b/app/views/game/searchresults.rhtml
new file mode 100644 (file)
index 0000000..54e7998
--- /dev/null
@@ -0,0 +1,28 @@
+<h1>Search Results</h1>
+
+<% if @games.empty? %>
+<p>Sorry, there were no results</p>
+<% else %>
+<table>
+  <tr>
+  <th>Game ID</th>
+  <th>Checked Out</th>
+  <% for column in Game.content_columns %>
+    <th><%= column.human_name %></th>
+  <% end %>
+  </tr>
+
+<% for game in @games %>
+  <tr>
+  <td><%=h game.id %></td>
+  <td><%=h game.checkedout? %></td>
+  <% for column in Game.content_columns %>
+    <td><%=h game.send(column.name) %></td>
+  <% end %>
+    <td><%= link_to 'Show', :action => 'show', :id => game %></td>
+    <td><%= link_to 'Edit', :action => 'edit', :id => game %></td>
+    <td><%= link_to 'Destroy', { :action => 'destroy', :id => game }, :confirm => 'Are you sure?', :post => true %></td>
+  </tr>
+<% end %>
+</table>
+<% end %>
index 72eb9b0..58750cd 100644 (file)
Binary files a/db/development.sqlite3 and b/db/development.sqlite3 differ