LoginSignup
1
1

More than 5 years have passed since last update.

リソースとパス

Posted at

パスを返すメソッドは、コントローラでもビューでも使える。ビューの中で会員一覧のページ(indexアクション)へのリンクは次のように作れる。
前提条件
ルーティングを
resouces :membersで入力しているとき
link_to "会員一覧", members_path

member_pathedit_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アクションへのパスになる

notes_controller
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のリクエストを送信する。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1