railsアプリに非同期通信でいいね機能を実装したい。
初めての質問になります。
同期通信で実装していた、いいね機能を非同期通信に変更したいのですが、viewが挙動せず困っております。
ターミナル上に下記のエラーメッセージが表示されております。
発生している問題・エラーメッセージ
ActionView::Template::Error (undefined method `id' for nil:NilClass): 1: <% if current_user.already_good?(tweet) %> 2: <%= button_to "Good-del_#{tweet.goods.count}", tweet_goods_path(tweet), method: :delete, class: "btn-good-del", remote: true %> 3: 4: <% elsif user_signed_in? %>
該当のソースコード
index.html.erb <div class="contner2"> <div class="contner"> <%= render @tweets %> </div> <div class="image"> </div> </div> <%= paginate @tweets %>
_tweet.html.erb <div class="artcle-con"> <div class="nickname-date"> <div class="nickname"> <%= link_to "#{tweet.user.nickname}", "/users/#{tweet.user_id}", method: :get %> </div> <div class="date"> <%= tweet.created_at.strftime('%Y/%m/%d') %> </div> </div> <div class="artcle-text"> <%= simple_format(tweet.text) %> </div> <div class="artcle-btn"> <% if user_signed_in? && current_user.id == tweet.user_id %> <%= button_to "EDIT", "/tweets/#{tweet.id}/edit", method: :get, class: "btn-edit" %> <%= button_to "DELETE", "/tweets/#{tweet.id}", method: :delete, data: {confirm: "本当に削除しますか?" }, class: "btn-del" %> <% elsif user_signed_in? %> <%= render partial: 'tweets/good', locals: {tweet: tweet} %> <%= button_to "comment", "/tweets/#{tweet.id}/comments", method: :get, class: "btn-com" %> <% end %> </div> </div>
_good.html.erb <% if current_user.already_good?(tweet) %> <%= button_to "Good-del_#{tweet.goods.count}", tweet_goods_path(tweet), method: :delete, class: "btn-good-del", remote: true %> <% elsif user_signed_in? %> <%= button_to "Good_#{tweet.goods.count}", tweet_goods_path(tweet), method: :post, class: "btn-good", remote: true %> <% end %>
create.js.erb $(".good").html("<%= j(render partial: 'tweets/good', locals: {tweet: tweet}) %>");
goods_controller.rb class GoodsController < ApplicationController def create Good.create(tweet_id: good_params[:tweet_id], user_id: current_user.id) @goods=Good.all @tweets=Tweet.all end def destroy good=Good.find_by(tweet_id: params[:tweet_id]) good.destroy end private def good_params params.permit(:tweet_id) end end
試したこと
https://qiita.com/fumikao/items/373caa60b77f27f2dbdd
上記を参考にしましたが、挙動せず。
変数tweetにはidが含まれていたので、idが何を意味しているのか分からない状態です。
ご教授お願い致します。
補足情報(FW/ツールのバージョンなど)
windows
rails 5.2.1
Mysql
jQuery
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/16 16:24
2020/03/16 21:13
2020/03/17 16:55
2020/03/17 20:31
2020/03/18 13:50