Rails MVC & ルーティング
前のページでデータベースを更新したので、Postに関係するページが利用できるようになっています。
scaffold実行時にconfig/routes.rb
ファイルにresources :posts
の1行が追加されており、
この1行だけでRESTfulなルーティングが用意されます。bundle exec rake routes
コマンドを使って現在のルーティングを確認してみましょう。
この出力は、http://localhost:3000/posts
にアクセスするとPostsControllerのindexアクションがリクエストを処理し、http://localhost:3000/posts
にPOSTリクエストを送るとPostsControllerのcreateアクションに処理が渡される、という対応付けを示しています。実際にhttp://localhost:3000/posts
にアクセスしてみると次のようなページが見えると思います。
アクションはController内にメソッド定義の形で記述されています。たとえばPostsControllerのindexアクションは以下の通りです。
そしてindexアクションの結果は、app/views/posts/index.html.erb
ファイルに渡され、ユーザの目に見えるHTMLを生成します。.html
の後に.erb
がついていて奇妙に感じたかもしれませんが、これはERBと呼ばれ、通常のHTMLの中に<% %>
や<%= %>
のような形でRubyコードを埋め込めるテンプレートエンジンです。
PostsController#index
で定義された@posts
インスタンス変数を受け取り、index.html.erb
の中でeachを回しているのがわかります。何かデータを入れてみましょう。New Post
をクリックすると次のような投稿画面に移動します。
適当な文字を入れてCreate Post
ボタンを押す手順を何度か繰り返すと、先ほど何もなかった/posts
画面にデータが表示されました。
デザインは無いに等しく、このまま「完成形」として人前に出せるものではありませんが、コードを1行も書かずに「一覧表示」「投稿フォーム」「変更/削除機能」を用意出来てしまうのがscaffoldの面白いところです。Railsを学習し始めたばかりの人はまずscaffoldでテンプレートを生成し、それをいじりながら仕組みを覚えていくのがオススメです。
ここまでで、scaffoldとRailsのコードの流れをひとめぐりできました。 次回からはコードに手を入れてTwitter(のようなもの)の作成を続けて行こうと思います。