パスを返すメソッドは、コントローラでもビューでも使える。ビューの中で会員一覧のページ(indexアクション)へのリンクは次のように作れる。
前提条件
ルーティングを
resouces :membersで入力しているとき
link_to "会員一覧", members_path
member_pathとedit_member_pathのように、個別のリソースを扱うアクションへのパスを得るには、引数にモデルオブジェクトを渡す。すると、モデルのidがidパラメータになる。
たとえば、会員詳細の情報ページ(showアクション)へのリンクは次のようになる。
link_to @member.name, member_path(@member)
削除のためのリンクでmethodオプションにDELETEメソッドを指定すれば、destroyアクションへのリンクになる。
link_to "削除", member_path(@member), method: :delete
オブジェクトでパスを表す
さらに簡略化したパスの表現。
link_toメソッドの第2引数にモデルオブジェクトを渡すと、/members/123のようにmember_pathメソッドと同じパスに変換される。
link_to member.name, @member
link_to "削除", @member, method: :delete
editアクションやsuspendアクションのように、個別のリソースを扱うアクションは、配列を使って[: アクション名, オブジェクト名]で表せる。次の例は/members/123/editや/members/123/suspendのようなパスになる。
link_to "編集", [:edit, @member]
link_to "停止", [:suspend, @member], method: :patch
indexアクションやnewアクションのようにidパラメータを取らないアクションでは、前述の◯◯_pathの_pathをとった文字列をシンボルにしたものが使える。
link_to "会員一覧", :members
link_to "新規追加", :new_member
以上のモデルオブジェクト、配列、シンボルで表したパスは、コントローラのredirect_toメソッドの引数としても使える。
以下はどれも同じshowアクションへのパスになる
redirect_to note_path(@note.id) #◯◯_pathの引数に表示したいnoteのidを渡す
redirect_to note_path(@note) #引数の.idは省略することができる
redirect_to @note #更にこのように省略できる。この場合@noteはnote_path(@note)と解釈される。
# redirect_toはデフォルトでgetのリクエストを送信する。