[Rails6] create.je.erbとdestroy.js.erbを起動させたい。
解決したいこと
railsにて非同期でいいね機能を作成したいです。
非同期でデータベースにいいねしたuser_id,いいねされた記事(article_id)が保存、削除することができる状況です。しかし、その後の非同期で保存が完了した後は非同期で削除ボタンを表示させること、削除が完了した後は非同期でグッドボタンを表示させることが出来ません。
これを解決できる方がいらっしゃいましたらどなたかご回答お願いいたします。
また、初質問のため質問フォームに至らぬ部分があるかもしれませんが。ご容赦いただ開けると幸いです。
該当するソースコード
app/views/articles/create.js.erb
$("#fsubmit").replaceWith("<%= escape_javascript(render 'favorites/unfavorite', { favorite: @favorite }) %>")
app/views/articles/destroy.js.erb
$("#unfavorite_<%= @favorite.id %>").replaceWith("<%= escape_javascript(render 'favorites/favorite', { aricle: @article, favorite_new: @favorite_new }) %>")
app/views/favorites/favorite.html.erb
<%= form_with(model: [@article, @favorite_new], local:true, id: "form_f", class: "form") do |form| %>
<%= form.submit 'GOOD!' , id: "fsubmit", data_id: @article.id, class: "favorite-btn" %>
<% end %>
app/views/favorites/unfavorite.html.erb
$("#unfavorite_<%= @favorite.id %>").replaceWith("<%= escape_javascript(render 'favorites/favorite', { aricle: @article, favorite_new: @favorite_new }) %>")
app/views/articles/show.html.erb
※省略※
<div class="Goodbtn">
<% if @favorite.nil? %>
<%= render partial: "favorites/favorite", local: { article: @article, favorite_new: @favorite_new } %>
<% else %>
<%= render partial: "favorites/unfavorite", local: { favorite: @favorite } %>
<% end %>
</div>
※省略※
app/controller/favorites_controller.rb
class FavoritesController < ApplicationController
def create
@article = Article.find(params[:article_id])
if @article.user_id != current_user.id
@favorite = Favorite.create(user_id: current_user.id, article_id: @article.id)
render json:{ article: @article, favorite: @favorite }
else
@comments = @article.comments.includes(:user)
redirect_to articles_path
end
end
def destroy
@article = Article.find(params[:id])
@favorite_new = Favorite.new
@favorite = Favorite.find_by(user_id: current_user.id, article_id: @article.id)
@favorite.destroy
# redirect_back(fallback_location: article_path)
end
private
def favorite_params
params.require(:favorite).permit(:article_id).merge(user_id: current_user.id)
end
end
0