Railsのlink_toや、url_forなど、リンク関連のビューヘルパーをまとめました。
#link_to:ハイパーリンクの作成
##使い方
link_to(リンクのテキスト , リンク先のURL [,あればオプション])
###使えるオプション
オプション | 概要 |
---|---|
method | リンク時に使用するHTTPメソッド |
remote | Ajaxでリンクを処理 |
date | js動作に関するパラメータ(削除確認ダイアログなど) |
属性名 | idとか、classとか |
##使用例
####・一番きほんてきなやつ
<%= link_to 'RailsGuides' , 'http://railsguides.jp/' %>
#=> <a href ='http://railsguides.jp/'>RailsGuides</a>
####・コントローラーとアクションから動的にURLを作成・id/classをつけたり
※この場合のurl、classなどのオプションの指定ともにハッシュを使っており、
メソッドに複数のハッシュを渡す場合は、前方(リンク先のURL側)のハッシュを{}で括る
括り忘れると、controller以降で一つの引数だとみなされ、URLになってしまう。
<%= link_to 'トップ' , {controller: :hello, action: :index} , id: :link, classl: :menu %>
#=> <a href ="/hello" class="menu" id="link">トップ</a>
####・HTTPメソッドを指定したり、リンククリック時にダイアログを表示してみたり
<%= link_to 'Destroy' , book_path(1) , method: :delete,data: {confirm: 'Are you sure?' } %>
#=> <a data-confirm="Are you sure?" data-method="delete" href="/books/1" rel="nofollow">Destroy</a>
※rel属性のnofollow値はリンク先が圃場されないページランクに影響すべきでないことを検索エンジンに通知
※実際には、HTTPメソッドのDELETEもPATCHもPOSTで行われているが、RailsのRESTfulな思想を体現するため、このように書き、そうすることで、そのメソッドを利用しようとした、という情報を送っている。
####・画像のリンクを作ってみたり
link_toには、引数としてimage_tag(画像ファイルのパス)を持つこともできる
<%= link_to image_tag("logo.png"), :action => "index" %>```
#=> <a href="/blogs"><img alt="Logo" src="/images/logo.png" /></a>
#url_for:動的にURLを作成
link_toメソッドの引数指定は、url_forメソッドと同じなので、ついでに勉強しておきましょー。
引数に与える情報から動的にURLを作ってくれます。
##使い方
url(URLの生成オプション)
###使えるオプション
オプション | 概要 |
---|---|
controller | コントローラー名 |
action | アクション名 |
host | ホスト名 |
protocol | プロトコル |
anchor | アンカー名 |
only_path | 相対URLを返すか。hostが指定されなかった場合、デフォルトはtrue |
trailing_slash | 末尾にスラッシュを付けるか |
user | HTTP認証に使用するユーザー名 |
password | HTTP認証に使用するパスワード |
##使用例
####・一番きほんてきなやつ
url_forは現在のコントローラーを基点にURLを作成する
そのため、下記のように、actionのみを指定した時は、コントローラーは現在のもの(hello)を使用する
<%= url_for(action: :new) %>
#=> /hello/new
####・idなど、パラメータを指定
charsetもクエリ情報に含まれることに注意
<%= url_for(controller: :books, action: :show, id: 5, anchor: 'rails' , charset: 'utf8' ) %>
#=> /books/5?charset=utf8#rails
####・only_pathを使って、絶対パスを返す
<%= url_for(controller: :members, action: :login, only_path: false, protocol: 'https' ) %>
#=> https://localhost:3000/members/login
####・引数にオブジェクトを渡す
<% @book = Book.find(2) %>
<%= url_for(@book) %>
#=> /books/2
####・特殊な用法
引数に「:back」を指定した場合は、url_forメソッドはRefererヘッダの値、つまり、現在のページのリンク元ページを表す。Refererヘッダが空の場合は、「javascript:history.back()」を返す
<%= url_for(:back) %>
#=> javascript:histroy.back()
####※コントローラーで、url_forで渡すデフォルト値を設定できる
コントローラー側で、default_url_optionsメソッドをオーバーライドすることで、url_forメソッドにデフォルトで渡すパラメータを指定できる
以下はviewコントローラー配下の全てのリンクにcharsetパラメータを付与する例
def default_url_options ( options = {} )
{ charset: 'utf-8' }
end
#link_to_if / link_to_unless:条件に応じてリンクを生成
##使い方
link_to_if ( 条件式 , リンクのテキスト [,リンク先のURL , オプション ] , 代替コンテンツ )
link_to_unless ( 条件式 , リンクのテキスト [,リンク先のURL , オプション ] , 代替コンテンツ )
link_to_ifメソッドは、条件式がtrueの場合にはアンカータグを、falseの場合は引数nameに基いて、固定テキストのみを出力する。
代替コンテンツがある場合は、それを出力する。
link_to_unlessはこの逆。
##使用例
<% @user = User.new %>
<%= link_to_if @user.nil? , 'ログイン' , controller: :login , action: :index %>
#=> <a href ="/login">ログイン</a>
#link_to_inless_current:現在のページの場合はリンクを無効化
link_to_unlessメソッドの特殊系。リンク先が現在のページである場合は、テキストのみを出力。
##使い方
link_to_unless_current ( リンクのテキスト [ , リンク先のURL ,オプション ] ,代替コンテンツ )
<%= link_to_unless_current '一覧へ' , action: :current %>|
<%= link_to_unless_current '詳細へ' , action: :detail %>
一覧へ|
<a href = "/view/detail">詳細へ</a>
以上です。
#参考
本記事は以下を参考にして書きました。
Ruby on Rails4 アプリケーションプログラミング
RailsTutorial
Ruby on Railsドキュメント