#目次
①link_toメソッドの使い方
②idを指定しない場合の書き方
③idを指定する場合の書き方
###①link_toメソッドの使い方
link_toメソッドとはビューで使用するActionView::Helpers::UrlHelperクラスで定義されているhelperメソッド。リンクを表示させたい時に使用し、htmlのaタグを生成してくれる。
link_toメソッドにリンクとして表示する文字列とリンク先を引数として渡すことで、リンクを表示させることができる。
記述方法は
link_to 'リンク文字列', リンク先のパス(URL),httpメソッドの指定(必要な場合)
または,
link_to 変数, リンク先のパス(URL),httpメソッドの指定(必要な場合)
外部のサイトやアプリケーション内のどこかに遷移したい時に、以下のように記述ができる
<%= link_to 'Google', 'http://www.google.co.jp/' %>
<%= link_to '顧客一覧’, ‘/clients/index’ %>
上記の記述もできるが、
rails routesとターミナルで入力して、Prefixに「_path」をつけて使用することができる。
※Prefixはパスが代入されている変数のようなもの。
###②idを指定しない場合の書き方
<%=link_to "チャットを作成する", new_room_path %>
上記のように記述する。link_toの次に記述するのは、ビューで表示させたい文字を記述する。
その次は、rails routesをして遷移したいprefixにpathをくっつけて記述をする。
※ /room/new/(.:format)のようにidを指定しない場合はそのままprefixにpathを付けるだけで良い。
###③idを指定する場合の書き方
link_to "リンクの表示名", prefix_path(渡すid), httpメソッドの指定(必要な場合)
ⅰ)一つのidの指定方法
<%= link_to "チャットを終了する", room_path(@room), method: :delete %>
room_path(@room)のインスタンス変数は、そのアクションを経由した時に、定義したインスタンス変数である。
link_toが使われているビューに遷移する前に、コントローラーを経由する。
その際に @room = Room.find(params[id])という記述があったとする。このアクションで定義された@roomをpathに使用することで、idを取得することができる。
この際にrails routesした時に、表示されるのは、/rooms/:id(.:format)のように表示される。
ⅱ)複数のidの指定方法
次に複数のidを指定する方法。では、link_toに複数のid情報を渡す必要があるのはどんなときか?
それはルーティングがネストされてる状況です。
下記の記述を見ると、messageはroomに紐づくモデルのとき、roomのルーティングはmessageの情報を持っている必要がある。
resources :rooms do
resources :messages, only: [:create, :destroy]
end
この時、rails routesしたときには、
/rooms/:room_id/messages/:id(.:format)のように表示される。
上記の時にpathを指定しidを取得するときは、複数取得しなければいけない。
では、どのように記述をするのかというと、以下のように記述をする。気をつけなければ行けないのは、idを書く際は、親のidから書かなければいけない。
link_to "削除", room_message_path(@room, @comment), method: :delete