#121 Non Active Record Model
Aug 04, 2008 | 12 minutes | Models
This episode will show you how to make a model which isn't based on Active Record. You may want to do this if a resource isn't backed by the database.
- Download:
- source codeProject Files in Zip (96.7 KB)
- mp4Full Size H.264 Video (16.4 MB)
- m4vSmaller H.264 Video (12.1 MB)
- webmFull Size VP8 Video (33.9 MB)
- ogvFull Size Theora Video (23.1 MB)
models/letter.rb
class Letter
attr_reader :char
def self.all
('A'..'Z').map { |c| new(c) }
end
def self.find(param)
all.detect { |l| l.to_param == param } || raise(ActiveRecord::RecordNotFound)
end
def initialize(char)
@char = char
end
def to_param
@char.downcase
end
def products
Product.find(:all, :conditions => ["name LIKE ?", @char + '%'], :order => "name")
end
end
class Letter attr_reader :char def self.all ('A'..'Z').map { |c| new(c) } end def self.find(param) all.detect { |l| l.to_param == param } || raise(ActiveRecord::RecordNotFound) end def initialize(char) @char = char end def to_param @char.downcase end def products Product.find(:all, :conditions => ["name LIKE ?", @char + '%'], :order => "name") end end
letters_controller.rb
def index
@letters = Letter.all
end
def show
@letter = Letter.find(params[:id])
end
def index @letters = Letter.all end def show @letter = Letter.find(params[:id]) end
letters/index.html.erb
<% title "Select a Letter" %>
<% for letter in @letters %>
<%= link_to letter.char, letter %>
<% end %>
<% title "Select a Letter" %> <% for letter in @letters %> <%= link_to letter.char, letter %> <% end %>
letters/show.html.erb
<% title "Products for Letter #{@letter.char}" %>
<p><%= link_to "Select a Letter", letters_path %></p>
<%= render :partial => @letter.products %>
<% title "Products for Letter #{@letter.char}" %> <p><%= link_to "Select a Letter", letters_path %></p> <%= render :partial => @letter.products %>

