Techioz Blog

Rails 7 で破棄するのではなくアクションを表示するようにリダイレクトします。

概要

Rubyのバージョンは3.1.2、Railsのバージョンは7.0.3.1です。

ユーザーを削除すると、ユーザーのコントローラーのアクションを破棄するのではなく、アクションを表示するようにリダイレクトされます。 ユーザー向けのルート

resources :users

アプリ/コントローラー/users_controller.rb

before_action :set_user, only: %i[ destroy ]
def destroy
    @user.destroy
    respond_to do |format|
    format.html { redirect_to users_url, notice: "User was successfully destroyed." }
      format.json { head :no_content }
    end
end

private
    def set_user
      @user = User.find(params[:id])
    end

app/views/users/index.html.erb

<% @users.each do |user| %>
    <div id="users">
        <%= render user %>
    <% end %>
</div>

app/views/users/_user.html.erb

<p>
  <%= link_to "Destroy this user", user, method: :delete %>
</p>

ユーザーを削除できません。

以下のリンクをたどりましたが、それも私のプロジェクトでは機能しません link_to ヘルパーはまだ get リクエストを実行しています

ありがとう!

解決策

フォームによる魔法の軽減

<%= button_to "Destroy this user", user, method: :delete %>

またはリンクを使用したその他の魔法

<%= link_to "Destroy this user", user, data: { turbo_method: :delete } %>

そして、redirect_to users_url に status: :see_other を追加することを忘れないでください。

Rails 7はそのように動作します