Railsでのlink_toの使い方

こんにちは!

今回はRailsでのlink_toの使い方についてまとめます。

<%= link_to "example.com", "http://example.com" %>
<%= link_to "一覧", members_path %>
<%= link_to "一覧", :members %>
<%= link_to "編集", [:edit, member] %>
<%= link_to "削除”, member, method: :delete, data: { confirm: "本当に削除しますか?" } %>

# いろんな書き方があってよくわからない
  • よくわからないのはパスの指定の部分
  • パスの指定はurl_forというメソッドが呼び出されている
    • url_forが与えられた引数からパスを作成している

url_forメソッドの引数のパターン

URL

  • 例: "http://example.com"
"http://example.com"

パス

  • 例: /members/123/edit
/members/123/edit

ヘルパーメソッド(resourcesメソッドで指定した場合)

  • 例: members_path
/members
  • 例: edit_member_path(@member)
/members/:id/edit
  • 例: :members
/members
  • 例: :new_members
/members/new

オブジェクト

  • 例: @member
/members/:id
  • 例: [:edit, @member]
/members/:id/edit

resources: membersとした場合に自動的に作られるヘルパーメソッド

アクション ヘルパーメソッド パス
index members_path , :members /members
show member_path(member) /members/:id
new new_member_path, :new_member /members/new
edit edit_member_path(member) /members/:id/edit
update member_path(member) /members/:id
destroy member_path(member) /members/:id

ポイント

  • URLとパスを直接指定するのは直感的に理解できるので、問題はヘルパーメソッドとオブジェクト

ヘルパーメソッドのポイント

  • ヘルパーメソッドはroutes.rbresources: membersなどの指定を行った時に、自動的に7つのアクション分作られる
  • また、_pathの部分は省略できるので、members_path:membersと表記できる
    • idの指定が必要ないアクションに限る
  • edit, newのように個別のid指定が必要な場合は、引数にモデルオブジェクトを渡す
    • モデルオブジェクトのidが使用される

オブジェクトのポイント

  • オブジェクト(モデルオブジェクト)は、/member/:idのように変換される
  • [:アクション名, オブジェクト]という表記が可能
  • destroyとupdateのように、同じパスを使用してHTTPメソッドでアクションを使い分ける必要がある時
    • method:で指定
      • 例: link_to "削除", @member, method: :delete
        • destroyアクション
      • 例: link_to "更新", @member, method: :patch
        • updateアクション

おわりに

今回はlink_toメソッドについてまとめました。昨日と今日のまとめで、フォームとリンクについて大分知識が深まった気がします。CRUDについても自分が書けるようになりつつあるので、少しずつですが前進しています!

45/100