起きている問題
投稿内容の削除後、投稿一覧にリダイレクトしたいがトップページにリダイレクトされてしまう。
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
にすることで投稿を削除した後は投稿一覧へリダイレクトできる。