Implementierte eine Like-Funktion, damit andere Benutzer die Posting-App mögen können. Angenommen, Sie haben eine Benutzertabelle, eine Beitragstabelle und eine Likes-Tabelle.
Betrachten Sie zunächst die Beziehung zwischen den einzelnen Tabellen und definieren Sie die Zuordnung. ** Benutzer (1): Wie (viele) ** ** Post (1): Wie (viele) ** Ich möchte es auch validieren, damit ich es einmal pro Post und Person ** wie ** machen kann.
like.rb
class Like < ApplicationRecord
belongs_to :user
belongs_to :post
validates_uniqueness_of :post_id, scope: :user_id
end
Wenn der Beitrag gelöscht wird, wird auch ** Like ** gelöscht.
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 %> //Zeige die Anzahl der Likes
Gefällt dir current_user schon? Wenn es "wahr" ist, wird es nicht gemocht, und wenn es "falsch" ist, wird es gemocht.
Es gibt andere Möglichkeiten, Likes zu implementieren, z. B. die asynchrone Implementierung. Ich lerne noch, aber ich möchte erweitern, was ich verschiedene Techniken lernen kann. Vielen Dank für das Lesen bis zum Ende: grinsen:
Recommended Posts