# Handling multiple lookup tables in rails

**URL:** <https://www.ruby-forum.com/t/handling-multiple-lookup-tables-in-rails/144467>\
**Category:** Rails\
**Created:** [July 29, 2008, 9:28pm UTC](https://www.ruby-forum.com/t/handling-multiple-lookup-tables-in-rails/144467 "2008-07-29T21:28:07Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![marlow](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/96bed5/32.png) [@marlow](https://www.ruby-forum.com/u/marlow)\
**Post date:** [July 29, 2008, 9:28pm UTC](https://www.ruby-forum.com/t/handling-multiple-lookup-tables-in-rails/144467/1 "2008-07-29T21:28:07Z")

</div>

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
