Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。コントローラとビューについて書いていきます。自作ヘルパーメソッドRailsのVIEWとは?MVCモデルにおけるVIEWにあたるもの。(まんまやん)こんな説明じゃあかんので、ちゃんと説明すると、見た目、Webページの見た目のデザインの定義です。具体的な話をすると、モデルの情報をどのような形で出力するかを定義して、そのとおりに表示するHTMLを出力する、というのがVIEWの役割です。Railsでは、Rubyのソースコード(いわゆるrb)ファイルではなく、テンプレートファイル(erb)という形式で作成します。ファイルの拡張子は.erbなのですが、決まりとして.erbの前に.htmlを付ける必要があるので、ある意味.html.erbなのかも。テンプレートとは?↑の説明通り、HTMLを生成するための部品です。テンプレートと言われることが多いです。前回の記事に書いたように、Railsは設定より規約という設計哲学があるので、もちろんテンプレートにもルールがあります。RailsはControllerのアクションの処理が完了した後自動的にアクション名.html.erbという名前のテンプレートファイルを呼び出すようになっています。このルールに従わないで別のテンプレートファイルを使いたい場合も数多くあります。ログインに成功した後はアクションのテンプレートを呼び出すが、失敗した場合ログイン失敗を表示するためのテンプレートファイルを呼び出す、といった場合です。いう時には、renderというメソッドでテンプレートを指定することができます。%>というタグを使うことでタグ内部にRubyのコードを書くことができます。%>は以下の様な機能の違いがあります。%>の中のコードを実行。実行結果はHTMLに出力されない。%>の中のコードを実行。実行結果はHTMLに文字列として出力される。%>はif,Each,end,変数の代入など、画面に表示しない処理を書くときに使う。%>はコントローラで準備したデータの内容や、フラッシュメッセージの表示で使う。%>は長嶋、王ってわけです。(野球ネタですみません。腹を切って謝罪しません。)コントローラからテンプレートへの値渡し基本的に、テンプレートでデータを作ると言うのはありません。データはすべてコントローラが準備して上げる必要があります。インデックスページを表示する場合、コントローラでモデルのデータを変数に格納し、それをテンプレートに渡すことになります。データの受け渡しはインスタンス変数を使います。実装としては、以下の様な形になります。%></table>コントローラのindexアクションで@dataというインスタンス変数にデータを格納して、それをテンプレートで使う、という感じです。テンプレート内の条件分岐テンプレート内で、例えばデータの中身が空だったら別の表示をする、といったシチュエーションは数多く有ります。いう時はRubyで開発する時と同様、Ifで条件分岐すれば、実現できます。以下のサンプルの場合、@dataのnameが空だったら名前をくださいと表示します。コレの応用で、ログインしている場合はユーザー名の表示、ログインしていない場合はログインページのリンク表示、等ができます。"名前は{@name}です。%>テンプレート内の繰り返し大量のデータを表示するインデックスページなどは、データを出力するタグをいちいち全部書いていくのは大変です。いうか、めんどくさくてやりたくありませんよね。いうコードはコピペしがち。(↑のサンプルもミスってます)。おまけにごちゃごちゃしていて読む気わかない。メンテナンス性も良くないので、例えば「おーい◯◯くん、お客さんが性別は表示しなくてもいいってー。直しといてね」なんて言われた日には性別の行だけを探していちいち削除しなくてはいけません。めんどくさ〜!こういう同じものが繰り返されるものは、Rubyでの開発と同様繰り返し構文を使ってササッとスマートにエレガントなコードにしましょう。%>こうすることで、「おい◯◯君!性別を表示しないでくれってお客さんに言われた!10分で直してくれ!」なんて無茶な依頼が来てもささっと直せることでしょう。(決して自分の実体験ではない)上のような重複がないコードになることでDRY原則を守ることができます。ちなみに、こういったソースコードを改善し、読みやすくメンテナンスしやすいコードにすることをリファクタリングと言います。プライベートのコードはそこまで気にしなくてもいいですが(と言っても汚いとメンテナンスしにくいよ)、仕事としてプログラミングをするなら、常にリファクタリングすることを心がけることでメンテナンス性・品質の維持ができ、スムーズな開発ができると思います。リファクタリングの名書がありますので、興味を持ったら読んでみるのをオススメします。(分厚いので時間かかるよ〜)言語はJavaですが、Java特有の機能などは使っていないので、他言語ができればだいたい読めます。見るちなみに、Rubyエディションというのもあります。こちらは読んだことがありません。見るレンダリング定義したテンプレートを実際のHTMLに出力することをレンダリングといいます。このレンダリングの際に、ActionView::Baseというクラスを継承し、ヘルパーモジュールをMixinしたクラスが自動的に生成され、そのインスタンスがテンプレートを実行してHTMLコードを出力します。ヘルパーメソッドとは?ヘルパーメソッドとは、テンプレートで使用できるヘルパー的な機能や、汎用的な機能をまとめたメソッドで、レンダリングの際に特定のHTMLタグ、文字列として出力されます。href="">というハイパーリンクタグを生成します。どのヘルパーがどのようなHTMLを作るか、というのはリファレンスを見るのもいいですが、実際に使ってみて、ブラウザのソース表示からHTMLを見るのがてっとり早く機能がわかります。以下のようなヘルパーメソッドがあります。文字列を指定の文字数に省略する。<img>タグを生成する。HTMLフォーム(labelタグ、inputタグ,submitタグ等)を作成するそれぞれのヘルパーを使ってみたいと思ったらぐぐってみてください。(そのうち自分でも書きます)自作ヘルパーメソッドヘルパーメソッドは自作することもできます。似た機能が幾つかまとめてモジュールとしたい場合、helpersディレクトリ内に◯◯_helper.rbというファイル名を作ってそこに書くのがベストです。ここで注意する点は、すべてのヘルパーがすべてのテンプレートにMixinされるということです。名前の衝突が発生する可能性があります。本書では、ヘルパーメソッド名は衝突することがないよう気をつける必要がある、と警告されています。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。