さて、ここで
routes.rbに記述したアクセス許可の文について考えてみましょう。今まで、特定のアドレスへのアクセスを許可するためには以下のような文を書いてきました。
get アドレス
post アドレス
これはこれで、まぁちゃんとアクセスできるのでいいのですが、アドレスが増えてくると正直、かなり面倒くさくなりますね。独自の機能を実装する場合は、自分しか「どういうアドレスで割り当てるか」はわからないので仕方ないのですが、CRUDのような汎用的な機能についてはもう少し簡単な方法があってもいいはずです。
実は、ちゃんとあります。今まで
routes.rbに記述してきた、山ほどの
get/post文をすべて削除し、以下の1文だけを記述してみてください。
resources :helos
これで、CRUDのすべての機能へのアクセスがきちんと機能するようになります。この
resourcesは、Railsに用意されている「
scaffolding」という機能のために用意されているもので、これ1文で、CRUDの基本アクションへのアクセスが用意されるようになっています。
resourcesにより利用可能になるのは以下のアドレスになります。
/helos
/helos/番号
/helos/new
/helos2/番号/edit
数が足りないな?と思うでしょうが、
/helosおよび
/helos/番号は
get,post,deleteでそれぞれ異なるアクションが呼ばれるようになるため、これでCRUDのひと通りの処理が行えるようになります。
また、今回作Viewヘルパーを使って成したフォームやリンクなどでは、送信先のアドレスに関する情報がまったく指定されていませんでした。それでもちゃんと正しいアクションメソッドが呼ばれました。これも、Viewヘルパーと
resourcesにより自動的に設定されていたのです。
resourcesは、CRUDを「
index」「
show」「
new」「
create」「
edit」「
update」「
destroy」というアクションで呼び出されるようにマッピングします。scaffoldingというCRUDの自動生成機能がこのように生成されるためです。そしてViewヘルパーで生成されたフォームでは、
resourcesで生成されるURLマッピングのアドレスにあわせてフォームの送信先が自動設定されるようになっていた、というわけです。
実をいえば、前回作成したCRUDのメソッドも、このscaffoldingのアクションに揃えて作成していたのです。だからresourcesでほぼ同じように機能するようにできたのですね。他のアクション名にしていた場合、
resourcesではうまく動きません。アクションメソッドの名前をscaffoldingのアクションにあわせて修正しなければならないでしょう。
これで、Viewヘルパーを使って「RailsらしいフォームCRUD」が作成できました。――え、「まだshowがない」って? showはフォームを使いませんからViewヘルパーのフォーム生成とは無縁です。前回作成した通りで変更は不要ですよ。