Implémentation d'une fonction similaire afin que les autres utilisateurs puissent aimer l'application de publication. Supposons que vous ayez une table des utilisateurs, une table des publications et une table des likes.
Tout d'abord, considérez la relation entre chaque table et définissez l'association. ** Utilisateur (1): J'aime (beaucoup) ** ** Message (1): J'aime (beaucoup) ** Je veux également le valider une fois par personne et par message car je veux le faire ** comme **.
like.rb
class Like < ApplicationRecord
belongs_to :user
belongs_to :post
validates_uniqueness_of :post_id, scope: :user_id
end
Si le message est supprimé, ** J'aime ** est également supprimé.
post.rb
has_many :likes, dependent: :destroy
user.rb
has_many :likes, dependent: :destroy
def already_liked?(post)
self.likes.exists?(post_id: post.id)
end
likes_controller.rb
class LikesController < ApplicationController
def create
@like = current_user.likes.create(post_id: params[:post_id])
redirect_back(fallback_location: root_path)
end
def destroy
@post = Post.find(params[:post_id])
@like = current_user.likes.find_by(post_id: @post.id)
@like.destroy
redirect_back(fallback_location: root_path)
end
end
routes.rb
resources :posts do
resource :likes, only: [:create, :destroy]
end
post_likes
DELETE /posts/:post_id/likes(.:format) likes#destroy
POST /posts/:post_id/likes(.:format) likes#create
~.html.erb
<% if current_user.already_liked?(post) %>
<%= link_to post_likes_path(post), method: :delete do %>
<i class="fas fa-heart"></i>
<% end %>
<% else %>
<%= link_to post_likes_path(post), method: :post do %>
<i class="far fa-heart"></i>
<% end %>
<% end %>
<%= post.likes.count %> //Afficher le nombre de likes
Aimez-vous déjà current_user? S'il est «vrai, il ne sera pas aimé», et s'il est «faux, il sera aimé».
Il existe d'autres moyens d'implémenter les likes, comme l'implémentation asynchrone. J'étudie toujours, mais j'aimerais augmenter ce que je peux étudier diverses techniques. Merci d'avoir lu jusqu'au bout: sourire:
Recommended Posts