
Ruby on Rails 5アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2017/04/14
- メディア: 大型本
- この商品を含むブログを見る
序文
「Ruby on Rails 5 アプリケーションプログラミング」学習9日目。
さっそくエイプリルフールにだまされた気がする。
大したことないアカでエイプリルフールネタなんかやるんじゃねぇ。
GitHub
進捗
- 第4章
- 4.3 リンク関連のビューヘルパー
(学習時間:2.5時間)
- 4.3 リンク関連のビューヘルパー
コード実装部分
↓/config/routes.rb
# 省略 get 'view/link' get 'view/urlfor' get 'view/new' get 'members/login' get 'login/index' get 'login/info' get 'view/linkif' get 'view/current' get 'view/detail' get 'view/mailto' end
↓/app/views/view/link.html.erb
<%# link_toメソッドの使い方 %> <%# シンプルな例 %> <%= link_to 'はてブ', 'http://yjkym.hatenablog.com/' %> <%# <a href="http://yjkym.hatenablog.com/">はてブ</a> %> <%# コントローラーとアクションを指定する %> <%= link_to 'トップ', { controller: :yahoo, action: :index }, id: :link, class: :menu %> <%# URLを指定する部分を{}で囲ってオプションと区別してやる必要がある %> <%# ↓こっちのほうが分かりやすいかも %> <%# <%= link_to 'トップ', {controller: :yahoo, action: :index}, {id: :link, class: :menu} %_> %> <%# ビューヘルパーを使用してURLを指定する例 %> <%# cd_path({id値})はcds/{id値}のパスを返す %> <%# :deleteはHTTPメソッドの指定(アクション名ではない) %> <%= link_to '削除', cd_path(1), { method: :delete, data: { confirm: '削除しても良いですか?'} } %> <%# <a data-confirm="削除しても良いですか?" rel="nofollow" data-method="delete" href="/cds/1">削除</a> %> <%# ブロックを使うとブロックの中身がリンクテキストになるっぽい %> <%# ちゃんと説明してほしい %> <% @cd = Cd.find(1) %> <%= link_to cd_path(@cd) do image_tag "http://kankeli.net/review100/images/cd/shuudankoudou_juubunmirai.jpg" end %> <%# <a href="/cds/1"><img src="http://kankeli.net/review100/images/cd/shuudankoudou_juubunmirai.jpg" alt="Shuudankoudou juubunmirai" /></a> %>
↓/app/views/view/urlfor.html.erb
<%# url_forメソッドでURLを生成する例 %> <%# link_toメソッドのURL指定も同様に行える %> <%# ルート定義を元にURLを生成する %> <%# アクションのみを指定した場合は現在のコントローラーからのリンクを生成する %> <%= url_for(action: :new) %><br /> <%# /view/new %> <%# コントローラーとアクションを指定した例 %> <%# ↓routes.rbを参照して適切なURLを生成してくれる %> <%# # GET /cds/:id(.:format) cds#show %> <%= url_for(controller: :cds, action: :show, id: 5, anchor: 'rails', charset: 'utf8') %><br /> <%# /cds/5?charset=utf8#rails %> <%# only_pathをfalseにすることで絶対URLで返す %> <%= url_for(action: :login, controller: :members, only_path: false, protocol: 'https') %><br /> <%# https://localhost:3000/members/login %> <%# オブジェクトを直接渡す例 %> <%# 主キーからURLを生成する %> <% @cd = Cd.find(2) %> <%= url_for(@cd) %><br /> <%# /cds/2 %> <%# ブラウザバックのやつ %> <%= url_for(:back) %> <%# javascript:history.back() %> <%# コントローラーでdefault_url_optionsメソッドを %> <%# オーバーライドすることでURLのデフォルト設定を変更することができる %> <%# ↓コントローラーに書く %> <%# def default_url_options(options={}) %> <%# { %> <%# charset: 'utf-8' %> <%# } %> <%# end %>
↓/app/views/view/linkif.html.erb
<%# link_to_if/link_to_unlessの例 %> <% @listener = Listener.new %> <%# 第一引数がtrueならリンクを生成し、 %> <%# falseならリンクのない固定テキストを生成する %> <%= link_to_if @listener.nil?, 'ログイン', controller: :login, action: :index %><br /> <%# <a href="/login/index">ログイン</a><br /> %> <%# (falseならテキストのみ) %> <%# falseならリンクを生成する。link_to_ifの逆 %> <%= link_to_unless @listener, 'ログイン', controller: :login, action: :index %><br /> <%# 出力結果は上と同じ %> <%# ブロックを渡すと、falseのときにはブロック内の処理を行う %> <%# 多分だけど使わないと思う(普通に条件分岐で書きたい) %> <%= link_to_if @listener.nil?, 'ログイン', controller: :login, action: :index do |name| link_to 'マイページ', controller: :login, action: :info end %> <%# ↓Trueの場合 %> <%# <a href="/login/index">ログイン</a> %> <%# ↓Falseの場合 %> <%# <a href="/login/info">マイページ</a> %>
↓/app/views/view/current.html.erb
<%# link_to_unless_currentメソッドの使い方 %> <%# リンク先が現在のページである場合にはリンクを生成しない %> <%= link_to_unless_current '一覧へ', action: :current %>| <%= link_to_unless_current '詳細へ', action: :detail %> <%# 一覧へ|<a href="/view/detail">詳細へ</a> %>
↓/app/views/view/mailto.html.erb
<%# mail_toメソッドの使い方 %> <%# メアドのみ指定 %> <%= mail_to 'caloriemate@please.com' %><br /> <%# <a href="mailto:caloriemate@please.com">caloriemate@please.com</a><br /> %> <%# リンクテキストを指定 %> <%= mail_to 'caloriemate@please.com', 'カロリーメイトはこちら' %><br /> <%# <a href="mailto:caloriemate@please.com">カロリーメイトはこちら</a><br /> %> <%# メールの内容もいろいろ指定できる %> <%# 使わないと思う %> <%= mail_to 'caloriemate@please.com', nil, subject: 'あげます', cc: 'caloriemate@give.you.to' %> <%# <a href="mailto:caloriemate@please.com?cc=caloriemate%40give.you.to&subject=%E3%81%82%E3%81%92%E3%81%BE%E3%81%99">caloriemate@please.com</a> %>
実行結果
感想
今日はリンク関連のビューヘルパーの基本的な使い方について。
ちょうどいい難易度。
最近、ようやくコントローラーとか指定する方法を覚えました。(直接URLばっかり書いてた)
Rubyの理解があやしいので、もうひとつ書籍を買いました。

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
# url_forメソッドなどで返すURLのデフォルト設定の変更 # options={}はデフォルト値付きの引数を設定している # Rubyではreturnを省略する(ややこい) def default_url_options(options={}) { charset: 'utf-8' } end
関数内部の括弧の部分自体が返り値になってるとかなかなか気づかないよねぇ。
こういう省略上等なRubyの記法、本当やだ。
カロリーメイトください。
BGM
充分未来 / 集団行動 www.youtube.com