Rails アプリ動作のバックグラウンド(基礎編)1
前準備
新しいRailsアプリを作成後
scaffoldでUsersリソースを作成します。
ここではとりあえずデータ型がstringのnameとemailという属性を持たせます。
$ rails generate scaffold User name:string email:string
マイグレートを実行
$ bundle exec rake db:migrate
これでCRUD可能なUsersリソースの作成が完了。 Rails サーバを起動
$ rails s
routeの設定をターミナルに表示しておきます。
$ rake routes
Prefix | Verb | URI Pattern | Controller#Action |
---|---|---|---|
users | GET | /users(.:format) | users#index |
POST | /users(.:format) | users#create | |
new_user | GET | /users/new(.:format) | users#new |
edit_user | GET | /users/:id/edit(.:format) | users#edit |
user | GET | /users/:id(.:format) | users#show |
PATCH | /users/:id(.:format) | users#up | |
PUT | /users/:id(.:format) | users#update | |
DELETE | /users/:id(.:format) | users#destroy |
ちなみに、これらのルーティングはconfig/routes.rb
内のresources :users
という一文ですべて定義されます。
また、scaffoldでリソースを生成すると、 リソースのコントローラと同時に
- そのコントローラに対応するビューのディレクトリ
- そのコントローラのアクションに対応するビューのテンプレート
が作成されることに注意してください。 コントローラアクションが呼び出されると、 それに対応するテンプレートを用いて対応するビューがレンダリングされます。 また、
- リソースのrouting
- マイグレーションファイル
もscaffoldで作成されるものに含まれます。
アプリの動作
/usersとindexアクション
ブラウザにてlocalhost:3000/users
にアクセスすると、Railsアプリケーションは
GET /users
というリクエストを受けます。
するとrouterは定義されたルーティングにしたがって、
リクエストをコントローラのアクションに送り(dispatch)ます。
ここでの場合、routesの一覧を確認すると、 GET users
リクエストはusers#index
とあるように、UsersController
のindex
アクションで処理されることになります。
Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index
ではapp/controllers/users_controller.rb
を見てみましょう。
class UsersController < ApplicationController ・ ・ def index @users = User.all end ・ ・ end
これがUsersコントローラに定義されたindexアクションですが、
これだけで/users
にアクセスしたとき、ページ(ビュー)が表示されるのが不思議ですね。
じつは、コントローラアクションのビューをレンダリングするにはrender ()
というメソッドを使うのですが、
アクションにrender ()
が記述されていない場合、コントローラはデフォルトで
render ()
を呼び出します。
コントローラアクションからrender ()
が呼び出されると、対応するテンプレートがレンダリングされます。
このとき、テンプレートでは、コントローラアクションの環境を用いることができます。
つまり、コントローラアクションで設定されたインスタンス変数を利用することができます。
この場合、具体的には@users
というインスタンス変数をテンプレート
(app/views/users/index.html.erb
)で用いることができます。
これによって、コントローラで定義したデータをビューで用いることができるようになります。
デフォルトの
render ()
メソッドでレンダリングされるテンプレートは2つありますが、そのことについては別に記述します。
では実際に表示されているビューを確認してみましょう。
http://localhost:3000/users
Listing users
Name Email
New User
この画面では登録されたユーザの一覧が表示されますが、 まだだれも登録をしていないので、誰も表示されません。
/users/new と newアクション
次に、 New Userをクリックしたときに何が起こるかを見ていきたいと思います。