Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。今回はレイアウトテンプレート、部分テンプレートについての解説回です。部分テンプレートの呼び出し部分テンプレートへのパラメータ渡し部分テンプレートを異なるコントローラ間で共有する部分テンプレートの保存先レイアウトテンプレートレイアウトテンプレートとは?全体の枠となる部分。Webページは、ある程度の共通性を持たせることで、操作しやすくなります。全体的に似たレイアウトにすることで、目的のページにスムーズに行けるよう考えてデザインする必要があります。このうち、ヘッダー部分とサイドバー部分はどのページを開いても表示されるようになっています。いうどこに行っても表示される部分を定義するのがレイアウトテンプレートです。いちいち全部のページのサイドバーを消さないといけません。いうものは1つにまとめることで、メンテナンス性がよく、ソースコードが重複することを防ぐことができます。newで新しくRailsアプリケーションを作成した時にデフォルトのレイアウトテンプレートが作成されます。その内容は以下のようになっています。%></body></html>内容としては、HTMLのヘッダーの定義をしているだけという感じ。部分に各アクションのテンプレートが埋め込まれるわけです。このレイアウトテンプレートがレンダリングされると、以下のようなHTMLソースになります。stylesheet_link_tagやjavascript_include_tagヘルパーメソッドがレンダリングされています。/></head><body></body></html>レイアウトテンプレートの使用方法よくある使用例として、Webページのタイトル文字列を設定があります。追加する、という動作になります。すると、テンプレートで@page_titleを設定すればそれぞれのページに合わせたタイトル文字列とアプリケーションをRailsが自動的に設定してくれるようになります。ヘッダー、サイドバー、ナビゲーションバー、等はレイアウトテンプレートで定義することもできますが、部分テンプレートとして作成したほうが、それぞれの部品が独立するためメンテナンスしやすくなります。レイアウトテンプレートの切り替えコントローラ、アクションによってはデフォルトとは別のレイアウトテンプレートを使用したいということもあると思います。管理者ユーザは管理用のバーを表示するが、標準ユーザーは表示しない、等、ユーザーによって表示するものを変える時です。レイアウトテンプレートの指定方法は、以下の3通りあります。apps/views/layouts/◯◯_html.erb(◯◯はコントローラ名)を作成する。Controllerでlayoutsメソッドを使う。"foobar"endそれぞれ、使用できる範囲が異なるので使いたいタイミングに合わせての使い分けになりそうです。layout:"するなら、コントローラのメソッドのlayoutsを使えばいいし、絶対このレイアウトと決まっているならコントローラ名のレイアウトテンプレートを作ってしまえばいいわけです。おまけデフォルトのレイアウトを変えてしまいたい時は、ApplicationControllerクラスでlayoutsメソッドを使いレイアウトテンプレートを指定すれば、デフォルトが変わります。ApplicationControllerクラスを継承したコントローラでlayoutsメソッドを使えば指定したレイアウトテンプレートに変えることもできます。全部のレイアウトそのものが変わるような動きの場合はApplicationControllerで指定してしまおう!部分テンプレート部分テンプレートとは?共通する部分、つまりテンプレートの一部を部品化する、というもの。あるものを部品化することでソースコードの重複を防ぎ、メンテナンス性をよくすることができる。部分テンプレートは、先頭に_(アンダースコア)を付ける必要があります。ファイル保存場所は基本的に部分テンプレートを使用するコントローラのフォルダ内app/views/◯◯(◯◯コントローラ名)になりますが、共用部品テンプレートとして別フォルダに保存することもできます。その場合は下記部分的テンプレートを異なるコントローラ間で共有するを参照してください。いう部分テンプレートが同じコントローラのフォルダにあったとします。それを、Edit.html.erbというテンプレートで使いたいと思った時は、以下のようにコーディングします。%><省略>renderメソッドはコントローラもビューにもあるのですが、使い方が異なるので注意してください。ちなみに自分も最初混乱しました。部分テンプレートへのパラメータ渡しここまでの話だけだと、「ん?部分テンプレートになにかパラメータは渡せないの?使いにくそう」なんて思うかもしれません。いや戦闘力じゃないから。部分テンプレートにパラメータを渡すこともできます。その場合、renderメソッドの引数としてパラメータを渡します。:Sample><省略>こうすることで、パラメータとして渡された情報がローカル変数としてアクセスできるようになります。%>パラメータは、複数渡すことができるので、状態と情報の2つを渡す・・・ということもできます。たくさんのパラメータを渡すようなら、もっと細かく部分化することを検討してもいいかもしれません。ちなみに、アクションで定義したテンプレート変数(テンプレート内で使える@~から始まる変数)は、部分テンプレートでも使うことができます。部分テンプレートと呼び出し元のテンプレートで同じテンプレート変数名じゃないと使えません。そのため、部分テンプレートが呼び出し元をいちいち気にする必要がでてしまうので、ちょっと使いにくくなってしまいます。いうわけで、パラメータを渡すことで呼び出し元も部分テンプレートもWin-Winな関係を結ぶことができるのです。(なんか違う)部分テンプレートを異なるコントローラ間で共有する異なるコントローラ間で似たような画面、例えばユーザーアカウントの編集、管理者アカウントの編集画面です。ユーザーアカウントの編集はUserコントローラ、管理者アカウントの追加はAdminコントローラですが、画面は似たような感じになるとします。(名前、メールアドレス、パスワードの入力画面)この似たたような部分を_form.html.erbという部分テンプレートにして、共有してみます。ViewsディレクトリにはUser,Adminという2つのサブディレクトリがあるとします。そこに、sharedというディレクトリを作成し、_form.html.erbという部分テンプレートを追加します。User/Adminコントローラからこの部分テンプレートを呼び出すときは、以下のようにrenderメソッドの引数の部分テンプレート名を、/views以降のディレクトリ名からのパスに設定します。"shared/form"><省略>こうすることで、部分テンプレートの共有ができるようになります。共有しているものははっきり共有しています!とわかりやすくするために共有用のフォルダを作っておくほうが、メンテナンスしやすいと思います。部分テンプレートの保存先について、RubyOnRailsアプリケーションプログラミングでは以下の用に説明されているので紹介します。通常は以下のようなルールに沿って、保存先フォルダを決める事を強くお勧めします。見る今回はSharedというディレクトリを共有に使いましたが、上記の様なルールでも良いと思います。そのうち記事に取り上げてみます。その心は?とある事を以前、職場の上司に言われた。プログラマを何年もや...2016-11-22関数、メソッド、プロシージャ。それぞれの違いは?どうもこんばんわ。プログラミングだと関数を作って・・・とか...2016-07-23CSRFとはなんぞやWebアプリのセキュリティ用語として、CSRFというものが有ります...2016-06-25RESTとはRubyOnRailsにおいて重要なキーワード、REST。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。