名前付きルート

単一テーブル継承を使ったときに、継承元のPerson用のControllerを、継承したManagerやEmployeeの処理でも使い回そうとしてエラーになっていた件は、ScaffoldのViewで名前付きルートを使っていることに関連がありました。名前付きルート自体、今回調べていて初めて知ったのですが...config/routes.rbに記述したルートの設定に応じて、使える様になるヘルパーメソッドのことの様です。

例えば、scaffoldを作成すると、config/routes.rbに以下のような記述がされますが、

ActionController::Routing::Routes.draw do |map|
  map.resources :people
  # ...省略

この場合、以下のようなヘルパーメソッドをlink_toなどで使えるようになります。

  • people_path
  • people_url
  • edit_person
  • new_person

また、Viewでは以下のようなヘルパーメソッドの呼び出しの記述があり、

<%= link_to 'Show', person %>

personがManagerクラスのインスタンスの場合には、最終的にmanager_pathというヘルパーメソッドが呼び出そうとするのですが、routes.rbには、Managerについての記述はないので、エラーなっていたようです。とりあえず、linke_toやredirect_toを呼び出す際に、Modelのインスタンスではなく、actionなどを指定すればよいみたいです。

Railsはまだまだわからないことが多いです。特にroutes.rbの記述は難しいですね。URLを自在に操れるようになる日は遠そうです。