Rails.2でcontrollerにメソッドの追加

Rails2で、indexやcreate,delete,showなど、httpからのリクエストを処理するメソッドに
listを追加したい。

その場合、まずは対象のモデルのcontrollerにlistメソッドを追加する。
今回はメソッドの内容としてはindexと全く同じ内容になっているが、フィルタなどを設定できる。

  def list
    @todos = Todo.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @todos }
    end
  end

ただし、Rail2では、
http://localhost:3000/todos/listと入力しても、listというIDは存在しないというエラーが帰るだけ。
というのは、editを呼んでみると判るが、
http://localhost:3000/todos/xx/edit
となっていて、URLはモデル/ID/メソッドの順番で解釈される。
そこで、解釈を規定しているroute.rbを編集する必要が出てくる。

scaffoldを使ってモデルを追加すると、自動的にroute.rbにもエントリが追加されているが、それを修正する。

#  map.resources :todos
  map.resources :todos, :collection => {:list => :get }

route.rbの下の方に、

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

という部分があり、此所がURLの解釈に大きく関わっている事は判ったけれど、まだよく理解できていない。