2011年7月31日

Rails3でレイアウトを共有しつつ静的ページを作成

 ただの静的ページならhtmlファイルを作ってpublicディレクトリに置けば済むのですけど、app/views/layoutsにあるテンプレートを使えなきゃ実用的じゃない。 それで色々試してみたのですけど、ようやく目的のものができました。

  • Controllerは空っぽでViewだけ作ればよかった。
  • config/routes.rbは1行で済んだ。
  • Viewはキャッシュされるので更新時は再起動する。

app/controllers/pages_controller.rbを作成

class PagesController < ApplicationController
  # app/view/pages/*.html.erbだけ作る。
end

 静的ページを扱うためのPagesコントローラーを作成しました。 初めはアクセスされたURLに対応するHTMLファイルをリードするアクションを作ろうとしていたのですが、そんな必要はありませんでした。

config/routes.rbを編集

Ubichupas::Application.routes.draw do
  get "/page/:action" => "pages#:action"
end

 ここの書き方が肝要。 「:action」と書いた箇所をアクション名に対応付けられます。 他にも「:id」とか覚えると好きなURLを作れるようになります。

app/views/layouts/pages.html.erbを作成

<!DOCTYPE html>
<html>
<head>
  <title>サイト名</title>
  <%= stylesheet_link_tag :all %>
  <%= javascript_include_tag :defaults %>
  <%= csrf_meta_tag %>
</head> <body> <%= yield %> <%= render 'layouts/footer' %> </body> </html>

 静的ページ用のレイアウトを作りました。 部分テンプレートはrenderのところに「'footer'」とだけ書くとapp/views/pages/_footer.html.erbが使用され、「'layouts/footer'」と書くとapp/views/layouts/_footer.html.erbが使用されるようです。

app/views/pages/welcome.html.erbを作成

<h1>こんにちわ</h1>
このページのURLはこうなります。<br/>
http://localhost:3000/page/welcome.html

 後は目的のページを量産するだけです。 いちいちアクションを書かかずにビューだけ作れば済むのは楽ですね。



 ようやくRails3のレシピブックが発売されました。 もっと早くこれがあれば悩むことも少なかったでしょうに・・・

1 件のコメント:

ぱん さんのコメント... 2012年9月21日 0:27
助かりました。

1点だけ;
---
Caopass::Application.routes.draw do
get "/page/:action" => "pages#:action"
---
は、
---
Caopass::Application.routes.draw do
get "/pages/:action" => "pages#:action"
---
では?
コメントを投稿