Ich werde es für mich selbst zusammenstellen.
** Controller-Modell erstellt **
routes.erb
Rails.application.routes.draw do
resources :posts do
resources :comments, only: [:create, :destroy]
resource :likes, only: [:create, :destroy]
end
end
Likes wird zu ** Ressource **, da keine ID angegeben werden muss
post.rb
def liked_by?(user)
likes.where(user_id: user.id).exists?
end
Sie können überprüfen, ob es Ihnen gefällt
likes_controller.rb
class LikesController < ApplicationController
def create
@post = Post.find_by(id: params[:post_id])
#Bedingungen, um kontinuierliche Klicks zu verhindern
unless @post.liked_by?(current_user)
@like = current_user.likes.new(post_id: @post.id)
@like.save
end
end
def destroy
@post = Post.find_by(id: params[:post_id])
@like = current_user.likes.find_by(post_id: @post.id)
@like.destroy
end
end
Eine Umleitung ist für das Erstellen bzw. Zerstören nicht erforderlich. Löschen Sie sie daher, falls beschrieben.
ruby:posts/show.html.slim
#Geben Sie eine ID an, da diese als Ajax erstellt werden muss
div id='like_#{ @post.id }'
#Partialisieren Sie das Like-Symbol
= render 'like', post: @post
ruby:posts/_like.html.slim
#Löschen wie
- if post.liked_by?(current_user)
= link_to post_likes_path(post), method: :delete, remote: true do
i.fas.fa-heart style='color: red;'
= post.likes.count
#Wie schön
- else
= link_to post_likes_path(post), method: :post, remote: true do
i.far.fa-heart
= post.likes.count
Rufen Sie eine JavaScript-Datei auf, indem Sie ** remote: true ** hinzufügen
ruby:likes/create.js.erb
$("#like_<%= @post.id %>").html("<%= j(render 'posts/like', post: @post ) %>");
ruby:likes/destroy.js.erb
$("#like_<%= @post.id %>").html("<%= j(render 'posts/like', post: @post ) %>");
**Komplett! ** **.
Recommended Posts