Rails4でGoogle Map API連携アプリを開発する

編集したERBの処理について解説2

さきほどは各ページで共通要素となるapplication.html.erbの処理内容について解説しました。個々のページで固有の処理をしてる箇所が数箇所あるのでそこについて順番に解説をしていきます。

<% %>の処理

ERBのファイル内で何度も出てくるこの記述ですがこの部分はRubyのプログラムとして解釈されます。

試しに、index.html.erbに以下を追記すると、タスク一覧の文字の下にhelloという文字が表示されるかと思います。

<h2>タスク一覧</h2>
<% concat "hello" %><br/>

画面上に文字を表示したい場合には、<% concat 文字列 %>でも実現できるのですが、<%= %>というように、<%のあとに、= を入れた以下の様な書き方をする方がのが一般的な書き方になります。

<h2>タスク一覧</h2>
<%= "hello" %><br/>

HTMLのタグの中で、以下のように、aタグを使ってリンクを貼ったり、imgタグで画像を表示する処理が比較的多く出てくるかと思います。

<a href="リンク先となる情報のURLを入力" alt="">表示したい文字列</a>
<img src="画像が保存されてるパスの情報を入力" />

上記のような記述をする際に、ERBでは

<%= link_to '表示したい文字列' リンク先 %>
<img src="<%= asset_path '画像ファイル名' %>" />

という書き方がよくされます。

do-end のループ処理

データベースから取得したデータを、順番に表示したいケースが良くあるかと思います。今回のToDoアプリの場合には、タスクの一覧を表示するような処理が該当します。

/app/views/tasks/index.html.erbの中で具体的には以下の部分が繰り返し処理をしてる所になります。

<% @tasks.each do |task| %>
  # 途中のHTMLタグは省略
  <%= task.content %>
<% end %>

<% %> で囲まれる所は、Rubyのプログラムとして解釈されると先ほど説明しましたが、Rubyの場合の繰り返し処理は

オブジェクト.each do |変数|
  実行する処理
end

という書き方をします。そのため以下のソースコードですが

<% @tasks.each do |task| %>
  <%= task.content %>
<% end %>
  1. (後ほど解説しますが)Modelを通じてデータベースから取得されたタスクの一覧が@tasksという名前で格納されているので、それを1つづつ取り出し変数のtaskに代入します
  2. 変数taskのcontentというプロパティを参照すると、ToDoとして登録したcontentの中身が取得できるので、<%= %>にて画面表示します

という処理を行ってます。

render _formで別ファイルの読み込み

renderの後に指定する内容でテンプレートを読み込んで適用することが出来ます。

使い方は例えば以下のようになります。

render :layout => "レイアウト名"
render :action => "アクション名"
render :template => "テンプレート名"
render :partial => "部分テンプレート名"

今回の処理内容の解説

今回は、

render form

という形で記述がされてますが:layoutとか:actionなどの :xxxx 指定が無い場合にはデフォルトの:partial が利用されます。

そのため上記記述は

render :partial => "form"

という処理と同じ意味になります。

ここで、form という名前のテンプレートが指定されてますが、/app/views/コントローラー名/の配下にある、先頭にアンダースコアー( _ )がついたfromではじまるもの、つまり_form.html.erbの内容がここで呼び出されて画面上に表示されます。

最後に

ERBのファイル内で何度も出てくる<% %>の記述ですがこの部分はRubyのプログラムとして解釈されます。

繰り返し処理をする際に、一定の条件のものだけ画面表示したいというような処理を行いたくなるケースもあるかと思いますが、その場合にはRubyのif文を使って、条件分岐することで実現できますので、この辺りはご自身で調べてみましょう。