が、前にもハマった気がする点にまたハマる程度には忘れていたので、
忘れないように備忘録エントリを作成する。
けど多分また忘れるんだろうな。。。
コントローラーアクションに単純なCRUDからちょい離れる作業を
GETメソッドでトリガーされるように追加しました。
routesにも書きました。
が、うまく動かずRuntime Errorになります。
各アイテムの状態変化(shanaiok, shanaing)を行なったあと、
一覧に戻るようにredirect_toを指定しているにも関わらず動かない。
routes.rbの内容:
OreApp::Application.routes.draw do resources :services get 'services/:id/normal' => 'services#normal' get 'services/:id/maint' => 'services#maint' get 'services/shanaiok' => 'services#shanaiok' get 'services/shanaing' => 'services#shanaing' root 'services#index' end
rake routesの結果:
$ rake routes Prefix Verb URI Pattern Controller#Action services GET /services(.:format) services#index POST /services(.:format) services#create new_service GET /services/new(.:format) services#new edit_service GET /services/:id/edit(.:format) services#edit service GET /services/:id(.:format) services#show PATCH /services/:id(.:format) services#update PUT /services/:id(.:format) services#update DELETE /services/:id(.:format) services#destroy GET /services/:id/normal(.:format) services#normal GET /services/:id/maint(.:format) services#maint services_shanaiok GET /services/shanaiok(.:format) services#shanaiok services_shanaing GET /services/shanaing(.:format) services#shanaing root GET / services#index
なんで言うこときかねーんだー!
…と悩むこと30分ほど。
- なぜかredirect_toを指定しているのに#showアクションに渡される。
- :idに"shanaiok"とか渡される。
あ、優先順位じゃん、と。
アクションで渡したいのに"shanaiok"自体が:idに渡されているのは
上の方にあるservices#showが拾っているからですね。
ルーティングは上から解釈され分岐していくものなのです。
修正後のroutes.rb:
OreApp::Application.routes.draw do get 'services/shanaiok' => 'services#shanaiok' get 'services/shanaing' => 'services#shanaing' resources :services get 'services/:id/normal' => 'services#normal' get 'services/:id/maint' => 'services#maint' root 'services#index' end
rake routesの結果:
$ rake routes Prefix Verb URI Pattern Controller#Action services_shanaiok GET /services/shanaiok(.:format) services#shanaiok services_shanaing GET /services/shanaing(.:format) services#shanaing services GET /services(.:format) services#index POST /services(.:format) services#create new_service GET /services/new(.:format) services#new edit_service GET /services/:id/edit(.:format) services#edit service GET /services/:id(.:format) services#show PATCH /services/:id(.:format) services#update PUT /services/:id(.:format) services#update DELETE /services/:id(.:format) services#destroy GET /services/:id/normal(.:format) services#normal GET /services/:id/maint(.:format) services#maint root GET / services#index
前にも引っかかったことがあり、学習能力がないようです俺。。 orz
そして極めつけには、routes.rbの初期ファイル内コメントに
# The priority is based upon order of creation: first created -> highest priority.…って書いてあるわけで、読まずにコメント捨てた俺はもっとダメ。
# See how all your routes lay out with "rake routes".