combining controller actions

Though I'm very new to Rails, I've been chugging along with the tutorials that are available. They're quite fun. While building my own web apps, I've decided to use a different URL scheme than the default controller/action/id scheme Rails defaults to.

For instance, I'm working on cloning a small section of YubNub, where URLs like http://yubnub.org/parser/parse?command=gim+dogs redirects the user to a Google Images query for dogs. When most of the activity will take place in one action (parse), there doesn't seem to be a good way for Rails to delegate actions. Because there is no real route for Rails to follow to get to the many actions (command=google, command=yahoo, command=ask), I can't just tell the various methods to render or redirect_to those actions. Also, any HTML forms I have in place cannot access an action unless there is a route to it. This makes sense--how else would the browser know which URL to send the form information?

Another example would be creating a wiki, where the default action should be to show a wiki page, but routing overrides any request to do things like http://site.com/wiki/SomePage?action=edit or http://site.com/wiki/SomePage?action=delete.

Currently, I've been cutting and pasting the code from action methods such as show, edit, destroy, and so on into one really big index method. I know this is slipping into spaghetti code territory, so I want to know if there is a better way of doing this.

Initial code as routed for controller/action/id URL scheme http://site.com/parser/command.

def index   respond_to { |format| format.html } end

def google   respond_to { |format| format.html } end

def yahoo   respond_to { |format| format.html } end

def ask   respond_to { |format| format.html } end

Code after combining into single action for use with URL scheme http://site.com/?command=<service>\.

def index   case params[:command]     when "google"       respond_to { |format| format.html } # google stuff...     when "yahoo"       respond_to { |format| format.html } # yahoo stuff ...     when "ask"       respond_to { |format| format.html| # ask stuff ...   end end