Ruby on Railsを基礎から学ぶ 第3回
〜埋め込み(テンプレート)、ヘルパーメソッド、リンクや画像〜
前回、コントローラの作成とアクションをやりました。
まだぱっとしない機能も多いと思いますが、今回ようやくHTMLへの埋め込みが行えます。
そして、前回コントローラを作った際に自動生成された4つのファイルの2つめ、ヘルパーについて説明していきます。
今回は前回以上にフォルダの行き来があります。
できるだけ作成一覧を載せていきますが、ファイルの構成はしっかり把握しておきましょう。
1.まずはHTMLに埋め込みをしてみる
まコントローラに入れた変数や処理結果を、まずはHTMLの中に埋め込んで表示させましょう。
これは、ほかのスクリプト言語と同じような書き方でいけます。
<%= @変数名 %>
画面に埋め込む場合「=」をつけて、ただ処理をする場合は、「=」はつけません。
<% @kingaku
* zei %> |
ただの処理だけ |
<%= @kingaku
%> |
テンプレートとして、WEBコンテンツに反映。 |
実際に資源を作りましょう。
@lesson.controller.rbにstep8を追加する
(略) def step8 num = rand 12 @damage = (num *
1.5).floor End (略) |
Astep8.html.erbを作成する
こちらのHTMLの雛形はは じめはありません。
ので、自分で作ってください。
C:\rails\xxxx\app\views\lesson
→ファイル名step8.html.erb
<p><%=
@damage %>のダメージを与えた!</p> |
内容は1行だけとシンプル!
<head><body>とか、ほかはどこへいったかは、次の回で説明します。
ここで、またWEBサーバ(ポート3000)を起動してください。
■実行例■埋め込み(step8 → step8.html.erb)
http://localhost:3000/lesson/step8
randで指定したサイコロは12までで。
それ以上の数値が出ているので、アクションstep8で乗算が成されているようです。
また、文章がくっついて表示されているので、雛形step8.htmlも使われているようです。
乱数を利用した例を示しているので、ためしに何回か更新(F5キー)すると、数値が変わることが確認できます。
BRenderに雛形をあてがう
今度は、step9を実行してみます。ここには、、
def step9 @damage= 1000 render "step8" end |
上のようにrenderのあとに、”step8”という雛形を指定できるのです。
実行してみましょう。
■実行例■renderでのテンプレート(step9 → step8.html.erb)
http://localhost:3000/lesson/step9
Step9で指定したdamage1000がそのまま出力されました。
これは、アクションstep9から、雛形step8を使って表示されたことを示し、
アクションstep8は使っていないことを示しています。
2.タグを含んだHTMLの扱い
まずは2例(step10,11)を見てみましょう。
step10 |
@comment =
"<script>alert('危険!')</script>こんにちは。" |
step11 |
@comment =
"<strong>安全なHTML</strong>" |
両方とも、タグwp含んだ文字列です。
続いて、雛形への埋め込み方法です。
ファイル名:step10.html.erb
<p><%=
@comment %></p> |
ファイル名:step11.html.erb
<p><%=
@comment.html_safe %></p> |
■微妙な実行例■タグを含む変数(step10 → step10.html.erb)
http://localhost:3000/lesson/step10
■安全な実行例■タグを含む変数(step11 → step11.html.erb)
http://localhost:3000/lesson/step11
このように、タグを使用したい場合は、.html_safeを付与します。
埋め込みに使用できるメソッドはこの他にもいろいろあるようですが、
おいおいコンテンツを厚くしていきたいと思います。
3.ヘルパーメソッドの作成
次にヘルパーメソッドを作ります。
ヘルパーは文字通り、コントローラのヘルパーさんです。
コントローラをgenerateしたときに出来た4つのファイルのうちの2つめ、、、
・app/helpers/lesson.helper.rb
を開いてみましょう。
非常にあっさりしています。
module LessonHelper end |
ここでは、\nが見つかったら。<br>改行にして、HTMLで安全に表示してください。
とまあ、書いてあるわけです。
たとえば、ユーザ登録の備考欄やご要望欄などのように
フォームから、数行の長い文章を取り込みたい場合は、このヘルパーさんが活躍します。
雛形には、以下のようにメソッド名(変数)の形で、入れておいてください。
<p><%=
tiny_format(@message)
%></p> |
■実行例■改行変換ヘルパーメソッド(step15 → lesson.helper.rb → step11.html.erb)
http://localhost:3000/lesson/step15
このように、改行が実行されています。
念のため、HTMLソースみてやろうか。ブラウザのメニュー→表示→ソースです。
<body>
<p>伊勢えびの姿焼きを希望<br />その他、車で来場します。<br />チェックインは未定なので、当日連絡します。<br />あまりおそくはなりません。</p>
</body> |
どうです。
4.リンクや画像を入れたい!
いままで、文字ばっかりだったので、リンクや画像を入れたいと思います。
普通は、雛形のxxx.html.erbなどに<a>タグなどを挟み込んでおきますが、
動的にリンクや画像を変えたいなんて場合も多いことでしょう。
ですので、埋め込み指定できるアクションがあります。
リンク |
<%= link_to
"Home", root_path %> |
画像 |
<%= image_tag("rails.png", size: "50x64", ・・・) %> |
と。非常にかんたんなものです。ここでは良く見られる画像にリンクが張られているというサンプルを
実行例として載せておきます。
もちろん、組み合わせて使うのみです。
・step16.html.erb
<p><%=
link_to(image_tag("rails.png", size: "50x64", alt:
"Ruby on Rails", align: "top"), "http://rubyonrails.org/") %></p> |
■実行例■リンク付き画像(step16 → step16.html.erb)
http://localhost:3000/lesson/step16
5.条件分岐と繰り返し
文法の章で条件分岐と繰り返しをやりましたが、これも非常にruby似通った書き方です。
それぞれ、書き方のみ付記して、コノ場は割愛します。
そのうち、更新するかもしれません。
条件分岐 |
<% if @damage > 0 %> ヒット!<%=
@damage %>のダメージを与えた! <% else %> 攻撃をかわした! <% end %> |
繰り返し |
<% @items.each do |key, val| %> <tr> <th><%=
key %></th> <td align="right"> <%= number_with_delimiter(val) %>円</td> </tr> <% end
%> |
条件分岐は、コントローラで10のダメージを変数で与えています。
繰り返しは、HTMLのテーブル(表)を繰り返しで生成しています。
今回のまとめとなるソースコードです。
今回、ヘルパーメソッドが出てきています。こちらの修正も忘れずに!。
◆ソースコード◆
格納先:C:\rails\xxxx\app\controllers
→ファイル名lesson_controller.rb 前回からのつづき
<!・・・(略) def step8 @price = (2000 *
1.05).floor end def step9 @damage= 1000 render "step8" end def step10 @comment =
"<script>alert('危険!')</script>こんにちは。" end def step11 @comment =
"<strong>安全なHTML</strong>" end def step12 @population = 704414 @surface = 141.31 end def step13 @time = Time.now end def step14 @population = 127767944 end def step15 @message = "伊勢えびの姿焼きを希望\nその他、車で来場します。\nチェックインは未定なので、当日連絡します。\nあまりおそくはなりません。" end def step16 end def step17 end def step18 @damage = 10 end def step19 @items = { "フライパン" => 2680, "ワイングラス" => 2550,
"ペッパーミル" => 4515, "ピーラー" =>
945 } end <! ・・・beforeなどが入る end |
次回は、モックについて考え、部分テンプレートとスタイルシートをやります。
いよいよ、WEBサイトらしい見栄えになってきます。見栄えだけですが・・・。
■ 参考テキスト■
サ改定新版 基礎 Ruby on Rails オイアクス監修 インプレスジャパン
Raccoon's homepage Copyright
(C) 2000-2013 あらいベアー