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.
# 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
# letters_controller.rb
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 %>
<!-- letters/show.html.erb -->
<% title "Products for Letter #{@letter.char}" %>
<p><%= link_to "Select a Letter", letters_path %></p>
<%= render :partial => @letter.products %>