作って学ぶRuby on Rails Vol.6 変数を活用しよう!


作って学ぶRuby on Rails Vol.6 変数を活用しよう!
目次
  1. ActionからViewへ値を渡す

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で表示させるといったことを行います。

Ruby_on_Rails_変数1

app/controllers/top_controller.rbを開いてください。

Ruby_on_Rails_変数2

自己紹介ページを修正していきたいので、上の図の赤枠の部分(profileというAction)に対して記述を行なっていきます。

のtryにて、必須項目だった前項

・出身地

・特技

・ひとこと

を変数化

変数名は何でも構いませんが、一目で何の項目かがわかるような命名をしましょう。

例では、

・出身地 → hometown

・特技 → skills

・ひとこと → remarks

とします。また、各項目は「文字列」として扱います。

Ruby_on_Rails_変数3

※「定義した変数が利用されていません」という内容の警告が表示されていますが、ここでは一旦無視します。

Action内で定義した変数は、Action内で利用できるようになります。

続いて、定義した各変数に値を代入します。

Ruby_on_Rails_変数4

変数に値を代入したので、次に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でも利用できるようにします。

従って、下の図のような記述になります。

Ruby_on_Rails_変数5

変数の前に@を付加することで、インスタンス変数として扱われ、定義した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を開いて下さい。

Ruby_on_Rails_変数6

具体的には上の図の赤枠部分を修正していきます。

※app/views/top/profile.html.erbの内容は、前項のtryの内容なのでみなさんぞれぞれ内容は異なります。

続いて、Actionで定義したインスタンス変数の内容を、Viewから参照します。

参照する際は、以前にレイアウトファイルを確認した際にも使われていた、

<%=%>という記述を行います。

<%=%>内に記述した文章は、Rubyのソースコードとして扱われるため、下記のように記述することでAction内で定義したインスタンス変数にアクセスすることができます。


<%= @hometown %>
<%= @skills %>
<%= @remarks %>

これらを下の図のようにViewファイルに埋め込みます。

Ruby_on_Rails_変数7

それでは、ブラウザで確認しましょう。

※Webサーバーが起動していない場合は、下記のコマンドで起動しましょう。


$ rails server -b 0.0.0.0 -p 8080

Ruby_on_Rails_変数8

上記の様に、Action内で定義したインスタンス変数の内容が読み込まれていればViewから正しく参照出来ています。

もし、エラーで表示できない場合は、本項のどこかで記述ミスがあるため、再度確認して下さい。

Try*TryViewからいろいろなインスタンス変数を参照しよう*本項で、出身地、特技、ひとことをViewで参照しましたが、生年月日や年齢、ユーザー名などの項目をActionで定義し、Viewで参照してみましょう。

NEXTLESSON年齢を設定しよう年齢を設定しよう

PREVLESSONページを画像やcssで整えよう!ページを画像やcssで整えよう!

目次-Ruby&RubyonRailsテキスト目次目次-Ruby&RubyonRailsテキスト目次


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp