0
0

More than 3 years have passed since last update.

delete後のredirect

Last updated at Posted at 2021-06-02

起きている問題

投稿内容の削除後、投稿一覧にリダイレクトしたいがトップページにリダイレクトされてしまう。

View

microposts/edit.html.erb

<h3>記事編集:「<%= @micropost.title %>」</h3>

<%= form_with(model: @micropost, local: true) do |f| %>
        <p>タイトル(最大255字)</p>
        <div class="form-group">
          <%= f.text_area :title, class: 'form-control', rows: 1%>
        </div>
    <p>内容(最大10000字)</p>
        <div class="form-group">
          <%= f.text_area :content, class: 'form-control', rows: 18 %>
        </div>

        <%= f.submit '保存する', class: 'btn btn-success btn-block mt-5' %>

      <% end %>

<%= link_to "削除する", @micropost , method: :delete, data: { confirm: "本当に削除しますか?" }, class: 'btn btn-danger btn-block mt-2' %>

controller

microposts_controller.rb
class MicropostsController < ApplicationController

  before_action :require_user_logged_in
  before_action :correct_user, only: [:edit,:update,:destroy,:show]

  def index 
    @microposts = current_user.microposts.order(id: :desc).page(params[:page]).per(10)

  end

  def update
    @micropost = Micropost.find(params[:id])

    if @micropost.update(micropost_params)
      flash[:success] = '保存されました。'
      redirect_to @micropost
    else
      flash.now[:danger] = '保存されませんでした。'
      render :edit
    end
  end

  def edit
    @micropost = Micropost.find(params[:id])
  end

  def show 
    @micropost=Micropost.find(params[:id])
  end

  def create
    @micropost = current_user.microposts.build(micropost_params)
    if @micropost.save
      flash[:success] = '記事を投稿しました。'
      redirect_to root_url
    else
      @microposts = current_user.microposts.order(id: :desc).page(params[:page])
      flash.now[:danger] = '記事を投稿できませんでした。'
      render 'toppages/index'
    end
  end

  def destroy
    @micropost.destroy
    flash[:success] = '記事を削除しました。'
    redirect_back(fallback_location: microposts_path)

  end



   private

  def micropost_params
    params.require(:micropost).permit(:content,:title)
  end

  def correct_user
    @micropost = current_user.microposts.find_by(id: params[:id])
    unless @micropost
      redirect_to root_url
    end
  end

end

解決方法

rootにリダイレクトしていた原因は、投稿を消したことによってcontrollerにある current_user メソッドのunless部分が実行されていたこと。つまり、root_urlとなっていた部分をmicroposts.pathにすることで投稿を削除した後は投稿一覧へリダイレクトできる。

0
0
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
0
0