パスを返すメソッドは、コントローラでもビューでも使える。ビューの中で会員一覧のページ(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のリクエストを送信する。