
URLとしては、「http://IPアドレス:ポート番号/アクション名/ID」にアクセスした際に表示される画面になります。
まずは、コントローラの処理から見ていきましょう。
コントローラ(app/controllers/users_controller.rb)
まず、着目するのは、「before_action」から始まる下記の記述です。
1 2 3 4 |
class UsersController < ApplicationController before_action :set_user, only: [:show, :edit, :update, :destroy] … end |
結論から言えば、上記構文は、「show(表示画面)、edit(編集画面)、update(更新画面)、destroy(削除画面)」が呼び出された際に、事前処理として「set_userメソッド」を実行するという意味になります。
今回は、表示画面の解説になるので、「set_userメソッド」が呼び出されることになります。
詳しい構文の意味は、下記で解説しています。
before_actionメソッド
このメソッドは、「アクションを呼ぶ前に特定の処理をさせたい場合に定義するメソッド」になります。
構文
1 |
before_action メソッド名,条件ハッシュ |
メソッドの引数の説明
メソッドの引数 | 説明 |
---|---|
メソッド名 | コントローラ内のメソッドをシンボルとして記述します。 |
条件ハッシュ | 適用するアクションの条件をハッシュで記述します。 |
条件ハッシュの構文
1 |
(only/except):[アクションのシンボル1,アクションのシンボル2,…] |
only
指定したアクションのみに適用されます。
except
指定したアクション以外の全てのアクションに適用されます。
showアクション
表示画面は、下記の「showアクション」が対応しています。
1 2 3 4 |
# GET /users/1 # GET /users/1.json def show end |
ただし、見て分かるとおりデフォルトでは何も中身が記述されていません。
では、画面に表示させる内容は、「set_userメソッド」で設定しているのです。
set_user(アクション名)メソッド
showアクションが呼ばれる前の事前処理になります。
1 2 3 4 5 6 7 |
private # Use callbacks to share common setup or constraints between actions. def set_user @user = User.find(params[:id]) end … end |
ここでは、画面の表示させているURLのIDの値のデータを取得して、「@user変数」に代入しています。
1 |
User.find(params[:id]) |
「params[:id]」というのは、「http://192.168.10.5:3000/users/298486374」というURLで言えば、「298486374」の部分を取り出す構文(HTTPパラメータを取り出す構文)になります。
URLのどの部分を、取り出すかはルーティング情報に記載されています。
ビュー(app/views/users/show.html.erb)
1 2 3 4 5 6 7 8 9 |
<p id="notice"><%= notice %></p> <p> <strong>Name:</strong> <%= @user.name %> </p> <%= link_to 'Edit', edit_user_path(@user) %> | <%= link_to 'Back', users_path %> |
ビューの出力内容は、ほぼ一覧画面で出力している内容と同じです。
【Ruby on Rails】「Scaffolding(スキャフォールディング)」で自動生成された「一覧画面」のソースコードを見てみる。
しいて言えば、画面表示に事前処理の「set_user(アクション名)メソッド」で代入した「@user」を使っていることでしょう。
この記事へのコメントはありません。