Open2

Railsのルーティング

seiya2130seiya2130

ルーティングごとのアクション

以下はresources :articlesを指定した場合と同じ

HTTP Verb Path Controller#Action Named Routing Helper
GET /admin/articles admin/articles#index admin_articles_path
GET /admin/articles/new admin/articles#new new_admin_article_path
POST /admin/articles admin/articles#create admin_articles_path
GET /admin/articles/:id admin/articles#show admin_article_path(:id)
GET /admin/articles/:id/edit admin/articles#edit edit_admin_article_path(:id)
PATCH/PUT /admin/articles/:id admin/articles#update admin_article_path(:id)
DELETE /admin/articles/:id admin/articles#destroy admin_article_path(:id)

名前付きルーティング

asオプションで任意のルーティングの_path_urlヘルパーを使用できる

#sessionsコントローラーのdestroyアクションを呼び出す
# pathは/exit
get 'exit', to: 'sessions#destroy', as: :logout 
<%= link_to 'Logout', logout_path %>

PATCH/PUT・DELETEの使い分け

PATCH/PUT

form_withを付けると自動でpachメソッドを設定する

<h1>Edit Article</h1>

<%= form_with model: @article, local: true do |form| %>
  <div>
    <%= form.label :title %>
    <%= form.text_field :title %>
  </div>

  <div>
    <%= form.label :content %>
    <%= form.text_area :content %>
  </div>

  <div>
    <%= form.submit 'Update Article' %>
  </div>
<% end %>

patchとputを手動で設定する場合、_methodでメソッドを送信する

PATCH

<form action="<%= admin_article_path(@article) %>" method="post">
  <!-- CSRFトークン -->
  <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">

  <!-- PATCHメソッドを指定 -->
  <input type="hidden" name="_method" value="patch">

  <label for="title">Title:</label>
  <input type="text" name="article[title]" id="title" value="<%= @article.title %>">

  <label for="content">Content:</label>
  <textarea name="article[content]" id="content"><%= @article.content %></textarea>

  <button type="submit">Update Article</button>
</form>

PUT

<form action="<%= admin_article_path(@article) %>" method="post">
  <!-- CSRFトークン -->
  <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">

  <!-- PUTメソッドを指定 -->
  <input type="hidden" name="_method" value="put">

  <label for="title">Title:</label>
  <input type="text" name="article[title]" id="title" value="<%= @article.title %>">

  <label for="content">Content:</label>
  <textarea name="article[content]" id="content"><%= @article.content %></textarea>

  <button type="submit">Update Article</button>
</form>

DELETE

method: :deleteオプションを付ける

<%= link_to 'Delete', admin_article_path(article), method: :delete, data: { confirm: 'Are you sure?' } %>

検証

https://github.com/seiya2130/rails_practice/pull/3/commits/ace2d9ba513b4cd05c06124faf874b8182bbb82c

https://github.com/seiya2130/rails_practice/pull/3/commits/e2fa8e5b922e3667fcedada6c120d67764578b13

参考

https://railsguides.jp/routing.html#コントローラの名前空間とルーティング

https://railsguides.jp/routing.html#名前付きルーティング