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の解釈に大きく関わっている事は判ったけれど、まだよく理解できていない。