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
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---