ActionからViewへ値を渡す
のTryにて、ご自身の自己紹介ページを静的なWebサイトとして作成して頂きましたが、本項からそれが少しずつ動的なWebアプリケーションへと変化していきます。前項
※前項のTryを行っていない方は、まずは前項のTryを行ってください。
前項のTryのサンプルソースはこちら
https://s3-ap-northeast-1.amazonaws.com/codecamp-textbook/rubyonrails/2/profile_sample.zip
現段階でControllerは、Viewを呼び出す機能としてしか使用しておりませんでしたが、
本項では、Controllerで処理を行いViewで表示させるといったことを行います。
app/controllers/top_controller.rbを開いてください。
自己紹介ページを修正していきたいので、上の図の赤枠の部分(profileというAction)に対して記述を行なっていきます。
のtryにて、必須項目だった前項
・出身地
・特技
・ひとこと
を変数化
変数名は何でも構いませんが、一目で何の項目かがわかるような命名をしましょう。
例では、
・出身地 → hometown
・特技 → skills
・ひとこと → remarks
とします。また、各項目は「文字列」として扱います。
※「定義した変数が利用されていません」という内容の警告が表示されていますが、ここでは一旦無視します。
Action内で定義した変数は、Action内で利用できるようになります。
続いて、定義した各変数に値を代入します。
変数に値を代入したので、次にViewでこれらの変数を利用したいです。
しかし、まだこれらの変数はprofileというAction内でのみ利用できるローカル変数
ここで、RubyonRailsで使用する変数についての基本動作について解説します。
・ローカル変数
例:hometown
各メソッド内やブロック内(doend)、ifend内等のendまでの間で利用できる変数をローカル変数と呼びます。Action内で定義するとそのAction内で利用でき、ifend内で定義すると、そのendまでの間で利用できます。
一般的に「変数」とだけ記述している場合は、このローカル変数を指します。
・インスタンス変数
例:@hometown
Action内で定義することで、Actionから呼ばれるView内でも使用可能な状態となります。
ActionとViewとで共通の変数を扱いたい場合は、このインスタンス変数を利用します。
・クラス変数
例:@@hometown
そのクラス内でのみ利用できる変数です。インスタンス変数のように、Viewと共有して利用することはできません。
※本カリキュラムでは扱いません。
・グローバル変数
例:$hometown
PHPでは変数の前に$を付加する文法となっていますが、Rubyでは$を付加するとグローバル変数として扱われます。グローバル変数はどこからでも参照できるため、名前の定義が被る可能性があるため、多用は禁物です。※特に複数人での開発時には注意が必要
※本カリキュラムでは扱いません。
・定数
例:Hometown
大文字のAZで始まる変数は「定数」として扱われます。定数は、定義後に値を代入することは許されません。
※代入することはできますが、実行時に警告が表示されます。
※本カリキュラムでは扱いません。
上記の中で、本カリキュラムで利用する変数としては、基本的にローカル変数とインスタンス変数のみです。
今回は、インスタンス変数を利用し、Actionで定義した変数をViewでも利用できるようにします。
従って、下の図のような記述になります。
変数の前に@を付加することで、インスタンス変数として扱われ、定義したActionから呼ばれるView内でも利用できるようになります。
※ @を付加する以前に表示されていた警告も消えています。
Ruby on Railsでの変数名RubyonRailsでは、Action名、メソッド名、変数名は基本的にスネークケースを使用します。Class名はキャメルケースを使用します。変数の例:ユーザー名・スネークケース例:○user_name×userName×usernameアンダースコア(アンダーバー)で単語を繋げて記述する記法です。・キャメルケース例:○UserName○userName×user_name×username単語同士が隣接する場合は、単語の始まりを大文字で記述する記法※Class名の命名規則として、初めの文字は大文字でなければなりません。
次に、変数化した自己紹介の項目をViewで表示していきます。
app/views/top/profile.html.erbを開いて下さい。
具体的には上の図の赤枠部分を修正していきます。
※app/views/top/profile.html.erbの内容は、前項のtryの内容なのでみなさんぞれぞれ内容は異なります。
続いて、Actionで定義したインスタンス変数の内容を、Viewから参照します。
参照する際は、以前にレイアウトファイルを確認した際にも使われていた、
<%=%>という記述を行います。
<%=%>内に記述した文章は、Rubyのソースコードとして扱われるため、下記のように記述することでAction内で定義したインスタンス変数にアクセスすることができます。
<%= @hometown %>
<%= @skills %>
<%= @remarks %>
これらを下の図のようにViewファイルに埋め込みます。
それでは、ブラウザで確認しましょう。
※Webサーバーが起動していない場合は、下記のコマンドで起動しましょう。
$ rails server -b 0.0.0.0 -p 8080
上記の様に、Action内で定義したインスタンス変数の内容が読み込まれていればViewから正しく参照出来ています。
もし、エラーで表示できない場合は、本項のどこかで記述ミスがあるため、再度確認して下さい。
Try*TryViewからいろいろなインスタンス変数を参照しよう*本項で、出身地、特技、ひとことをViewで参照しましたが、生年月日や年齢、ユーザー名などの項目をActionで定義し、Viewで参照してみましょう。
NEXTLESSON年齢を設定しよう年齢を設定しよう