libro
www.tuyano.com
初心者のためのRuby on Rails3入門

レイアウトを活用しよう (6/7)

作成:2012-01-30 08:07
更新:2012-02-16 15:30

■Controllerにindexアクションメソッドを用意する

さあ、これでレイアウト関連のファイルはすべて揃いました。では、実際にこれを利用してみましょう。下にHelosControllerクラスのindexメソッドの内容を掲載しておきました。このように記述をしてください。

表示するViewテンプレート(index.html.erb)の例も挙げておきました。ここでは、<%= @msg %>というようにしてメッセージを表示するだけのシンプルな内容にしてあります。

さあ、すべてできたら、実際にhttp://localhost:3000/helos/indexにアクセスしてみてください。淡い赤を基調とするページが表示されます。ページのタイトルには「サンプルレイアウト」、ヘッダーには「コンテンツのヘッダー」、そしてコンテンツには「これはコンテンツに表示されるメッセージです。」というテキストがそれぞれ表示されるのがわかるでしょう。

ここで行なっているのは非常に単純なものです。@title@header_content@msgの各メンバー変数にそれぞれテキストを設定しているだけです。これらはいずれもテンプレートに用意したファイル内で利用していましたね。

コードを見て「あれ? どこでテンプレートを使っているんだ?」と思った人。実は、そんな処理は必要ないのです。Railsでは、Controller名と同じ名前のテンプレートが「layouts」内に用意されていれば、自動的にそのレイアウトを使ってページがレンダリングされます。「helos.html.erb」があれば、何もしなくてもheloコントローラーのアクションではすべてこのレイアウトが使われるのです。

もし、「明示的に特定のレイアウトを使ってレンダリングさせたい」という場合には、renderメソッドを利用できます。アクションメソッドの最後に、
render :layout=>"レイアウトの名前"
このようにして使用するレイアウトを指定してレンダリングをします。この:layoutの値は、レイアウトのファイル名ではないので注意してください。例えば「hoge.html.erb」というファイルが「layouts」内にあったなら、render :layout=>"hoge"と記述すれば使用できるようになります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※indexメソッドの用意

 def index
    @title = "サンプルレイアウト"
    @header_content = "コンテンツのヘッダー"
    @msg = "これはコンテンツに表示されるメッセージです。"
 end


※index.html.erbの内容

<p><%= @msg %></p>
<hr>

※関連コンテンツ

「初心者のためのRuby on Rails3入門」に戻る