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…

thanks

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])

end

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

  end

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

end

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs