前提・実現したいこと
現在webアプリを作っているのですが、deviseを使っているのですがdeviseのbefore_action :authenticate_user!がいいね機能で作用しないです。いいねはログインをしている人しかできないようにしたいです。posts/indexはログインしてなくての見れるようにしたいです。理想はいいねボタンを押すとログインフォームに飛ぶようにしたいです。
⬇️ ログインしていない状態です。いいね!ボタンを押すと何もならないです。
該当のソースコード
posts/controller class PostsController < ApplicationController before_action :authenticate_user!, only: [:new,:create,:edit,:update,:destroy] before_action :find_post, only: [:show, :edit, :update, :destroy] before_action :correct_user, only: [:destroy,:edit] def index @posts = Post.order(id: :desc).page(params[:page]).per(8) end def show end def new @post = Post.new end def create @post = current_user.posts.build(post_params) if @post.save flash[:success] = "正常に投稿されました!" redirect_to posts_path else flash.now[:danger] = "正常に投稿できませんでした。" render :new end end def edit end def update if @post.update(post_params) flash[:success] = 'ノートは正常に更新されました' redirect_to root_path else flash.now[:danger] = 'ノートは更新されませんでした' render :edit end end def destroy @post.destroy flash[:success] = 'メッセージを削除しました。' redirect_back(fallback_location: root_path) end private def post_params params.require(:post).permit(:content,:title,:teacher_name,:subject,:post_image) end def find_post @post = Post.find(params[:id]) end def correct_user @post = current_user.posts.find_by(id: params[:id]) unless @post redirect_to new_user_session_path end end end
favorites/controller class FavoritesController < ApplicationController before_action :authenticate_user! def create @post = Post.find(params[:post_id]) @favorite = current_user.favorites.create(post_id: params[:post_id]) end def destroy @post = Post.find(params[:post_id]) @favorite = current_user.favorites.find_by(post_id: @post.id) @favorite.destroy end end
_favorite_button <%if user_signed_in? %> <% if current_user.already_favorited?(post) %> <%= link_to post_favorites_path(post.id), method: :delete, remote: true do %> <i class="fas fa-heart"></i> <%end%> <%else%> <%= link_to post_favorites_path(post.id),method: :post, remote: true do %> <i class ="fas fa-heart"></i> <%end%> <%end%> <% else %> <%= link_to post_favorites_path(post.id),method: :post, remote: true do %> <i class="fas fa-heart"></i> <% end%> <% end %> <%=post.favorites.count%>
post/index <div class="row row-cols-md-3"> <% @posts.each do |post| %> <div class="col-md-3"> <div class="card"> <%= attachment_image_tag post, :post_image, class: "card-img-top"%> <div class="card-body"> <h4 class="card-title"><%=post.title%></h4> <h6 class="card-subtitle text-primary"><%=post.subject%></h6> <h6 class="card-subtitle text-muted"><%=post.teacher_name%></h6> <p class="card-text"><%=post.content%></p> <%= link_to "詳細", post_path(post), class: "btn btn-info"%> <div class="text-center-1"> <% if current_user == post.user %> <%= link_to "削除", post, method: :delete, data: { confirm: "You sure?" }, class: 'btw' %> <%= link_to "編集", edit_post_path(post), class: "bta"%> <%end%> <div id="favorites_buttons_<%= post.id %>"> <%= render partial: 'favorites/favorite_button', locals: { post: post} %> </div> </div> </div> </div> </div> <% end %> </div> <%=paginate @posts %>
是非お願いします。
あなたの回答
tips
プレビュー