AR삽질러

Rails 一日一つメソッド (Day5) destroyメソッド 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day5) destroyメソッド

아랑팡팡 2023. 12. 25. 22:55
728x90

 

Rails 一日一つメソッド (Day5) destroyメソッド

 

destroyメソッドとは

 - destroyメソッドは Active Record オブジェクトをデータベースから削除するために使用される。オブジェクトのデータベース レコードを削除し、関連するコールバック(before_destroy、after_destroyなど)をトリガーし、 このプロセスにより、オブジェクトに関連付けられたデータを安全に削除できる。

destroyメソッドの動作方法
 1. オブジェクトの検索

  - まず、削除したいオブジェクトを探したり、呼び出したりします。 これはfind、find_byなどのメソッドを使って行うことがでる。
 2. オブジェクトの削除

  - destroyメソッドを呼び出してオブジェクトを削除する。 この過程で、該当するオブジェクトのbefore_destroyコールバックが先に実行され、データベースからレコードが削除された後、after_destroyコールバックが実行される。

 

例題

def destroy
	@user = User.find(params[:id])
    # @user = User.find_by(id: params[:id])
    redirect_to users_path, notice: 'ユーザーが削除されました。'
end

 


destroyメソッド例題

 1. HTTP要請

 - 'index' Viewで '削除' バトンをクリックしたら 'user_path(user), method: :delete' の 'users/:id' に渡す。

 2. Routing

 - delete要請は 'users/:id' に渡され 'UsersController' の 'destroy' アクションに渡される。

 3. Controllerアクション

 - 'User.find(params[:id]) を使ってDatabaseからIDを持っている 'User'レコードを削除する。

 4. リダイレクション

 - ユーザーが削除されたら 'redirect_to users_path' にリダイレクションされる。

 

users_controller.rb

class UsersController < ApplicationController
    def destroy
        @user = User.find(params[:id])
        @user.destroy
        redirect_to users_path, notice: 'ユーザーが削除されました。'
    end
end

@user = User.find(params[:id])

 - 渡された 'id' で削除する 'id' をDatabaseから探す。

@user.destroy

 - destroyメソッドを呼び出てユーザーを削除する。

redirect_to user_path, notice:  'ユーザーが削除されました。'

 - ユーザーの削除に成功したら 'user_path' にリダイレクションする。

 

routes.rb

Rails.application.routes.draw do
  # 회원삭제
  delete 'users/:id', to: 'users#destroy'
end

delete

 - 'delete'とはHTTPリクエストでRailsで削除の作業をする。

'users/:id'

 - URLパタンを指定する。

to: 'users#destroy'

 - 対象 : どんなControllerのどんなアクションを指定する。

 - ここで 'users' は 'UsersController' を表している、'destroy' は 'UserController' 中にある 'destroy' アクションを示している。

 

index.html.erb

<!-- app/views/users/index.html.erb -->
<h1>登録されている Users</h1>

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Email</th>
      <th>Actions</th>
    </tr>
  </thead>
  <tbody>
    <% @users.each do |user| %>
      <tr>
        <td><%= user.id %></td>
        <td><%= user.name %></td>
        <td><%= user.email %></td>
        <td>
          <%= button_to '削除', user_path(user), method: :delete %>
        </td>
      </tr>
    <% end %>
  </tbody>
</table>

 

button_to '削除'

 - HTMLを生成し'削除'バトンをクリックすると、サーバーにリクエストを送信する。

user_path(user)

 - ユーザーの固有IDを共に 'users/:id' URLを生成する。

method: :delete

 - destroyアクションにRoutingするようにする。

 


https://github.com/designAR/rails_method_study/tree/day05_destroy

 

GitHub - designAR/rails_method_study

Contribute to designAR/rails_method_study development by creating an account on GitHub.

github.com

 

728x90
반응형
LIST