読者です 読者をやめる 読者になる 読者になる

tkymtk's blog

Ruby on Rails及びその周辺について調べたこと。Do whatever you want to do at your own pace.

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でリソースを生成すると、 リソースのコントローラと同時に

  • そのコントローラに対応するビューのディレクトリ
  • そのコントローラのアクションに対応するビューのテンプレート

が作成されることに注意してください。 コントローラアクションが呼び出されると、 それに対応するテンプレートを用いて対応するビューがレンダリングされます。 また、

もscaffoldで作成されるものに含まれます。

アプリの動作

/usersとindexアクション

ブラウザにてlocalhost:3000/usersにアクセスすると、Railsアプリケーションは GET /usersというリクエストを受けます。 するとrouterは定義されたルーティングにしたがって、 リクエストをコントローラのアクションに送り(dispatch)ます。
ここでの場合、routesの一覧を確認すると、 GET usersリクエストはusers#index とあるように、UsersControllerindexアクションで処理されることになります。

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をクリックしたときに何が起こるかを見ていきたいと思います。

続き: Rails アプリ動作のバックグラウンド(基礎編)2 - tkymtk's blog

間違いがあれば、ご指摘下さると幸いです。