Railsでいいね機能を実装したのですが、エラーが出てしまいました。
missing required keys:[:id]
と出ていたのでいいねした投稿に紐づくidが取れていないのかなと思いました。
仕様としては、
「投稿詳細ページで記事にいいねを押す」
↓
「トップページに戻るとエラーが出る」
という感じになっている状況です。
ちなみに「投稿詳細ページでいいねを押し、そのまま遷移せずにいいねをもう一度押していいねを削除すればエラーは出ない」という感じです。
##試したこと
idがないと言われていたので、controllerに.find(id: params[:id]
という記述を追加しました。
しかし変わらずという状況ですね..。
##コード
以下のコードがトップページのviewになります。
7~9行目にいいね機能を搭載したコードを部分テンプレートで読み込んでいます。
view
1<table class="table"> 2 <% @all_ranks.each_with_index do |work,i| %> 3 <% if i == 1 %> 4 <div class="work_box1"> 5 <%= link_to(work_path(work)) do %> 6 <%= attachment_image_tag work, :image, :fill, 260, 154,fallback: "no_image.jpg", size:'260x154', format: 'jpeg' %> 7 <span id="work-<%= work.id %>-like1" class="like"> 8 <%= render 'shared/likes', work: work, like: @like %> 9 </span> 10 <div class="work_box_item"> 11 <strong><%= work.title %></strong> 12 <p> 13 <%= work.created_at.strftime('%Y/%m/%d') %> 14 </p> 15 </div> 16 <% end %> 17 </div> 18 <% else %> 19 <div class="work_box"> 20 <%= link_to(work_path(work)) do %> 21 <%= attachment_image_tag work, :image, :fill, 230, 154,fallback: "no_image.jpg", size:'230x154', format: 'jpeg' %> 22 <span id="work-<%= work.id %>-like1" class="like"> 23 <%= render 'shared/likes', work: work, like: @like %> 24 </span> 25 <div class="work_box_item"> 26 <strong><%= work.title %></strong> 27 <p> 28 <%= work.created_at.strftime('%Y/%m/%d') %> 29 </p> 30 </div> 31 <% end %> 32 </div> 33 <% end %> 34 <% end %> 35 </table>
以下がいいね機能を実装している部分テンプレートになります。
今回のエラー自体はここの3行目に現れています。
<% if user_signed_in? %> <% if work.like_user(current_user.id) %> <%= button_to work_like_path(work, like), class: "today", method: :delete, remote: true do %> <i class="fas fa-heart"></i> <span> <%= work.likes_count %> </span> <% end %> <% else %> <%= button_to work_likes_path(work), class: "today", remote: true do %> <i class="far fa-heart"></i> <span> <%= work.likes_count %> </span> <% end %> <% end %> <% else %> <i class="far fa-heart"></i> <span> <%= work.likes_count %> </span> <% end %>
以下がcontrollerになります。今回のエラーで試したこととしてindexアクションに@like = Like.find_by(id: params[:id] user_id: current_user.id, work_id: params[:id])
と記述してみたのですが、エラー内容が変わらなかったため現在は消しています。(id: params[:id]という部分です。)
def index @works = Work.all.order(created_at: :desc) @all_ranks = Work.find(Like.group(:work_id).order('count(work_id) desc').limit(6).pluck(:work_id)) if params[:tag_name] @works = @works.tagged_with("#{params[:tag_name]}") end @like = Like.find_by(user_id: current_user.id, work_id: params[:id]) if user_signed_in? end def show @work = Work.find(params[:id]) @like = Like.find_by(user_id: current_user.id, work_id: params[:id]) if user_signed_in? @comment = Comment.new @comments = @work.comments end
##問題だと思うところ
以前は動いていたのですが、エラーが出てくるようになってしまいました。
現にエラー以前に投稿していたものに関してはトップページでいいねが表示できています。
ご教授いただけると幸いです。
足りない記述などありましたら教えていただけるとうれしいです????♂️
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/27 22:01
2019/12/27 23:57