rails 非同期いいね機能実装の際に発生したエラーで躓いてしまいました。 初心者です。
解決したいこと
エラーの解消と非同期いいねの実装
Ruby on RailsでTwitterのようなWebアプリをつくっています。
非同期いいね機能の実装中にエラーが発生しました。
解決方法を教えて下さい。
Rails 7.0.3
ruby 3.1.2
deviseなし
https://note.com/become_engineer/n/n45f7285622e3
上記の記事を参考に非同期いいねを導入しています。
発生している問題・エラー
ActionController::UnknownFormat in LikesController#create
LikesController#create is missing a template for this request format and variant.
request.formats: ["text/html"]
request.variant: []
おそらくの原因
$('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");
$('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");
変更後
名前をjs -> html に変更すると反応するようになるという記事を見つけたので名前を変更しました。
$('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");
$('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");
NoMethodError in Likes#create
undefined method `id' for nil:NilClass
@virtual_path = "likes/create";;@output_buffer.safe_append='$(\'#likes_buttons_'.freeze;@output_buffer.append=( @post.id );@output_buffer.safe_append='\').html("'.freeze;@output_buffer.append=( j(render partial: 'likes/like', locals: {post: @post}) );@output_buffer.safe_append='");'.freeze;
^^^
$('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");(赤マーカー)
class LikesController < ApplicationController
before_action :authenticate_user
before_action :post_params
def create
Like.create(user_id: @current_user.id, post_id: params[:id])
end
def destroy
Like.find_by(user_id: @current_user.id, post_id: params[:id]).destroy
end
private
def post_params
end
end
本来
本来は下記のコードだったのですが、
def post_params
@post = Post.find(params[:id])
end
下記のようなエラーが出たため、とりあえず削除しました。
ActiveRecord::RecordNotFound in LikesController#create
Couldn't find Post without an ID
次に
before_action :post_params
上と下
private
def post_params
@post = Post.find(params[:id])
end
上記のコードを不要だと思い、削除すると下記のエラーが発生しました
NoMethodError in Likes#create
undefined method `id' for nil:NilClass
@virtual_path = "likes/create";;@output_buffer.safe_append='$(\'#likes_buttons_'.freeze;@output_buffer.append=( @post.id );@output_buffer.safe_append='\').html("'.freeze;@output_buffer.append=( j(render partial: 'likes/like', locals: {post: @post}) );@output_buffer.safe_append='");'.freeze;
$('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");
最後まで読んでいただきありがとうございます。
教えて頂けると幸いです。
よろしくお願いいたします。