handling multiple lookup tables in rails

I've got an application that will have a handful of lookup tables. To be clear by this I mean tables that only have two attributes, id, name and are used to provide drop-down lists for other tables/forms so that these fields have "standard" values. I need 5 to 10 of these tables.      I'm a ruby/rails neophyte but I've read Agile Web Devel with Rails, Rails Recipes, Adv Rails Recipes so I think I understand the basics but this has me stumped. The models/views/controllers for all these lookup tables are identical. I would think there would be a way to have 1 Controller (e.g. LookupController) 1 set of views (in directory /lookups) and a model for each lookup table. Then the Lookup controller would (possibly with a before_filter) figure out which lookuptable I want to edit (possibly with a route such as (lookup/:model) where :model would be the name of the lookup table I want to edit.     Can anyone point me to either some documentation or provide hints on how to do this sort of thing cleanly?     Below is the code I'm playing around with....


in routes I've got

# lookups/CollectionType/lookups #lookups/Gender/lookups

map.resources :lookups, :path_prefix => 'lookups/:mdl'

ex Lookup Controller

class LookupsController < ApplicationController   # GET /lookup   # GET /lookup.xml before_filter :setup_tables

  def index     @lookups = @theModel.find(:all)

    respond_to do |format|       format.html # index.html.erb       format.xml { render :xml => @lookups }     end   end

  # GET /lookup/1   # GET /lookup/1.xml   def show     @lookup = @theModel.find(params[:id])

    respond_to do |format|       format.html # show.html.erb       format.xml { render :xml => @lookup }     end   end

  # GET /lookup/new   # GET /lookup/new.xml   def new     @lookup = @theModel.new

    respond_to do |format|       format.html # new.html.erb       format.xml { render :xml => @lookup }     end   end

  # GET /lookup/1/edit   def edit     @lookup = @theModel.find(params[:id])


  # POST /lookup   # POST /lookup.xml   def create     @lookup = @theModel.new(params[:lookup])

    respond_to do |format|       if @lookup.save         flash[:notice] = 'Lookup value was successfully created.'         format.html { redirect_to(@lookup,:mdl=>@mdl) }         format.xml { render :xml => @lookup, :status => :created, :location => @lookup }       else         format.html { render :action => "new" }         format.xml { render :xml => @lookup.errors, :status => :unprocessable_entity }       end     end   end

  # PUT /lookup/1   # PUT /lookup/1.xml   def update     @lookup = @theModel.find(params[:id])

    respond_to do |format|       if @lookup.update_attributes(params[:lookup])         flash[:notice] = 'Lookup was successfully updated.'         format.html { redirect_to(@lookup,:mdl=>@mdl) }         format.xml { head :ok }       else         format.html { render :action => "edit" }         format.xml { render :xml => @lookup.errors, :status => :unprocessable_entity }       end     end   end

  # DELETE /lookup/1   # DELETE /lookup/1.xml   def destroy     @lookup = @theModel.find(params[:id])     @lookup.destroy

    respond_to do |format|       format.html { redirect_to(lookups_url, :mdl=>@mdl) }       format.xml { head :ok }     end   end

  private     def setup_tables       # I assume there is some way to instantiate a class with a string name but I did this       # just to try to get something working       if params[:mdl] == "CollectionType"         @mdl = params[:mdl]         @theModel = CollectionType      else if params[:mdl] == "Gender"         @mdl = params[:mdl]         @theModel = Gender


      @lookupTbl = @theModel.find(:all)     end end