singular_path calling index instead of show using a GET

I have a general query page that contains the following:

<% form_tag(search_url(@id), :method => :get) do %>
  <%= text_field_tag(:id, '', :size => 25) %>
  <p>
    <%= submit_tag "Search Database" %>
  </p>
<% end %>

I want the URL to be serial_number/A1234 and it performs the search.
That works in my controller. But the page wants to call index with a
query string. I know and have as a hack redirect from index to show,
but that just slows it down because of the redirect. I also can
duplicate the code in both index and show, but that is not very DRY.

The controller is this:

  # GET /search
  # GET /search.xml
  def index
    redirect_to(:action => 'show', :id => params[:id]) unless
params[:id].nil?
  end

  # GET /search/:id :id is search serial number
  # GET /search/:id.xml
  def show
    unless params[:id].nil?
      @items = tem.by_serial_number(params[:id])
      respond_to do |format|
        format.html # index.html.erb
        format.xml { render :xml => @items }
      end
    end
  end

Also, is there a way to change the default parameter from id to
something that is more intelligent like in this case "serial_number"
or sn?

Don French

bump

Any Ideas?

Don French