Modelを作ろう! (5/7)
作成:2012-02-06 08:19
更新:2012-02-16 15:33
更新:2012-02-16 15:33
■ControllerとViewの修正
Modelができたら、このModelをControllerから利用するように内容を修正しましょう。今回は、Modelのデータを単純に表示するようなアクションを用意してみます。
まずはControllerの修正です。helos_controller.rbを下のリスト欄のように書き換えましょう。ここでは、indexアクション1つだけを用意しています。ちなみに、★マークのついた2文は、前回作ったレイアウト用のインスタンス変数ですので、使わないのであれば不要です。
ここでは、indexアクションで、Heloクラスからすべてのデータを取得しています。これは以下のように行なっています。
取り出した値は、「helo.title」と「helo.content」でそれぞれtitleとcontentの値をとり出しています。つまり@helosは、Heloインスタンスの配列だったのです。Modelクラスでは、保管するデータをそれぞれプロパティとして用意しています。ここではHeloクラスを作成する際、titleとcontentという値を定義しておきましたから、これらのプロパティを調べればその値が取り出せる、というわけです。
Modelクラスにおけるデータの取得などについては次回詳しく行うとして、とりあえず「allで全データが取り出せる」ということだけ頭に入れておけばよいでしょう。
まずはControllerの修正です。helos_controller.rbを下のリスト欄のように書き換えましょう。ここでは、indexアクション1つだけを用意しています。ちなみに、★マークのついた2文は、前回作ったレイアウト用のインスタンス変数ですので、使わないのであれば不要です。
ここでは、indexアクションで、Heloクラスからすべてのデータを取得しています。これは以下のように行なっています。
@helos = Helo.all笑えるほど簡単ですね。Heloクラスの「all」を呼び出せば、もう全データが取り出せてしまうのです。では、この取り出したデータというのはどのようなものなのでしょうか。これはViewでその内容を表示している部分を見ればわかります。
<% @helos.each do |helo| %>@helosの「each」というメソッドを呼び出しています。これは「イテレータ」というもので、配列などから順に値(オブジェクト)を取得し、doの後の変数に保管する、ということを繰り返していきます。要するに、これで「配列の全要素について何らかの処理を行う」ということができるのですね。
<tr>
<td><%= helo.title %></td>
<td><%= helo.content %></td>
</tr>
<% end %>
取り出した値は、「helo.title」と「helo.content」でそれぞれtitleとcontentの値をとり出しています。つまり@helosは、Heloインスタンスの配列だったのです。Modelクラスでは、保管するデータをそれぞれプロパティとして用意しています。ここではHeloクラスを作成する際、titleとcontentという値を定義しておきましたから、これらのプロパティを調べればその値が取り出せる、というわけです。
Modelクラスにおけるデータの取得などについては次回詳しく行うとして、とりあえず「allで全データが取り出せる」ということだけ頭に入れておけばよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※helos_controller.rbのソースコード # coding: utf-8 class HelosController < ApplicationController def index @title = "サンプルレイアウト" #★ @header_content = "コンテンツのヘッダー" #★ @msg = "これはコンテンツに表示されるメッセージです。" @helos = Helo.all render :layout=>"helo" end end ※index.html.erbのソースコード <p><%= @msg %></p> <hr> <table border="1"> <% @helos.each do |helo| %> <tr> <td><%= helo.title %></td> <td><%= helo.content %></td> </tr> <% end %> </table>
※関連コンテンツ