現在、railsにてアプリ制作中ですが、メッセージにいいね機能を追加しております。
参考にしたサイトは、https://qiita.com/nojinoji/items/2c66499848d882c31ffaになります。
現状としては、いいねボタンをおしても、いいねが保存されない状況です。
恐らく、「<%= button_to 'いいね', {controller: 'likes', action: 'create'}, {method: :post } %>」か、ルーティングの書き方が間違っているような気がするのですが、どこが悪いのかわからない状況です。
いいねボタンを押した時の挙動
下記のエラーが出ている状況です。
いいねボタンを押した時のログ
Started POST "/likes" for ::1 at 2020-11-27 13:04:30 +0900 Processing by LikesController#create as HTML Parameters: {"authenticity_token"=>"qf1hIs6n7xzMfSiQpK8iFA6tzLn56nzlsLWlkVEP8Ls19Eu9SPJWyNMSUcoBXRFhb2XJaBO42q6FjLi7cqrG3w=="} User Load (1.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/likes_controller.rb:3:in `create' (0.2ms) BEGIN ↳ app/controllers/likes_controller.rb:3:in `create' Like Exists? (0.4ms) SELECT 1 AS one FROM `likes` WHERE `likes`.`message_id` IS NULL AND `likes`.`user_id` = 4 LIMIT 1 ↳ app/controllers/likes_controller.rb:3:in `create' (0.4ms) ROLLBACK ↳ app/controllers/likes_controller.rb:3:in `create' No template found for LikesController#create, rendering head :no_content Completed 204 No Content in 12ms (ActiveRecord: 2.2ms | Allocations: 5543)
ruby
1#view(show_message.html.erb) 2<h1>投稿詳細ページ</h1> 3<h3><%= @message.user.email %></h3> 4<h3><%= @message.content %></h3> 5<h3>いいね件数: <%= @message.likes.count %></h3> 6<% if current_user.already_liked?(@message) %> 7 <%= button_to 'いいねを取り消す', {controller: 'likes', action: 'destroy'}, {method: :delete } %> 8<% else %> 9 <%= button_to 'いいね', {controller: 'likes', action: 'create'}, {method: :post } %> 10<% end %> 11<h2>いいねしたユーザー</h2> 12<% @message.liked_users.each do |user| %> 13 <li><%= user.email %></li> 14<% end %> 15 16<%= link_to "ホームへ戻る", root_path %>
ruby
1#messages_controller.rb 2 def show 3 @message_course = params[:course] 4 @course_params = params[:course] 5 @messages = Message.where(course: params[:course]) 6 @like = Like.new 7 end 8 def show_message 9 @message = Message.find(params[:id]) 10 @like = Like.new 11 12 end
#likes_controller.rb class LikesController < ApplicationController def create @like = current_user.likes.create(message_id: params[:message_id]) # redirect_to root_path # redirect_back(fallback_location: root_path) end def destroy @like = Like.find_by(message_id: params[:message_id], user_id: current_user.id) @like.destroy # redirect_to root_path redirect_back(fallback_location: root_path) end end
ruby
1#routes.rb 2 get "/messages/index",to: 'messages#index' 3 get '/messages/show/:course', to: 'messages#show' ,as: "every_course_message" 4 get '/messages/show/:course/:id', to: 'messages#show_message' ,as: "message_show" 5 resources :likes, only: [:create, :destroy]
押したときのログではなくメッセージ表示したときのログに見えるのですが、いかがでしょうか。
ボタンはフォームもなく、JavaScriptでイベントも登録してなければなにもしませんよ。
ご回答ありがとうございます。おっしゃる通り、getしかしていませんでした。
POSTのログは下記でした。
Started POST "/likes" for ::1 at 2020-11-27 13:04:30 +0900
Processing by LikesController#create as HTML
Parameters: {"authenticity_token"=>"qf1hIs6n7xzMfSiQpK8iFA6tzLn56nzlsLWlkVEP8Ls19Eu9SPJWyNMSUcoBXRFhb2XJaBO42q6FjLi7cqrG3w=="}
User Load (1.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY `users`.`id` ASC LIMIT 1
↳ app/controllers/likes_controller.rb:3:in `create'
(0.2ms) BEGIN
↳ app/controllers/likes_controller.rb:3:in `create'
Like Exists? (0.4ms) SELECT 1 AS one FROM `likes` WHERE `likes`.`message_id` IS NULL AND `likes`.`user_id` = 4 LIMIT 1
↳ app/controllers/likes_controller.rb:3:in `create'
(0.4ms) ROLLBACK
↳ app/controllers/likes_controller.rb:3:in `create'
No template found for LikesController#create, rendering head :no_content
Completed 204 No Content in 12ms (ActiveRecord: 2.2ms | Allocations: 5543)
質問は編集できます。
しかし、エラーが出てます。質問内容と齟齬がありますね。
そのエラーの通り対応してみたのでしょうか。
失礼致しました。質問文も訂正させて頂きました。likes_controllerも抜けておりました。
ひとまず現状だと「エラーの通り」という回答になりますが、それで良いのでしょうか。
すみません、エラーを読んでみましたが、意味がよくわかりません。
No template found for LikesController#create, rendering head :no_contentのあたりでしょうか…
likesに関しては、viewファイルは必要ないので、作っていないです。render・・・とありますが、renderしないといけないのでしょうか。