Tomo_mikoki1104
@Tomo_mikoki1104 (Tomoya S)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[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

1Answer

ajaxでリクエストを送りたいという感じだと思うので、form_withで指定しているlocal: truelocal: falseにする必要があると思います。

1Like

Comments

  1. ご回答ありがとうございます!
    出来ない時間が長かったため、別の方法で非同期でいいね機能を作成してしまいましたてんてんてん…
    また、別の開発の際に導入してみようと思います!
    コメントありがとうございました!

Your answer might help someone💌