[Ruby on Rails] Implementierung einer ähnlichen Funktion

Einführung

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.

Verband

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

Controller-Implementierung

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

Routing-Einstellungen

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

Implementierung anzeigen

~.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.

Schließlich

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

[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer ähnlichen Funktion
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Über die Implementierung der Like-Funktion
[Ruby on Rails] Implementierung der Kommentarfunktion
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
[Ruby on Rails] Folgen Sie der Funktionsimplementierung: Bidirektional
Implementierung einer ähnlichen Funktion (Ajax)
[Rails] Implementierung der Kategoriefunktion
Ruby on Rails Implementierung der automatischen Mail-Sendefunktion
[Rails] Implementierung der Tutorial-Funktion
[Ruby on Rails] Asynchrone Kommunikation der Posting-Funktion, Ajax
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
[Rails] Implementierung der CSV-Importfunktion
[Ruby on Rails] Paging-Funktion eingeführt
[Rails] Implementierung der Bildvorschau
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Ruby on Rails] CSV-Ausgabefunktion
[Ruby on Rails] DM, Chat-Funktion
Implementierung einer ähnlichen Funktion in Java
[Ruby on Rails] Lesezeichenfunktion (bevorzugte Registrierung, wie): Eine Richtung
Ein Hinweis zum Seed-Feature von Ruby on Rails
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
[Ruby on Rails] Einführung der Anfangsdaten
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
[Ruby on Rails] Japanische Fehlernotation
Erklärung von Ruby auf Schienen für Anfänger ①
[Ruby on Rails] Logisches Löschen (Auszahlungsfunktion)
Implementierung der Suchfunktion
Ruby on Rails Grundlagen
Implementierung der Pagenationsfunktion
Ruby On Rails Association
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Validierungseinstellungen für die Ruby on Rails-Anmeldefunktion
[Ruby on Rails] Bis zur Einführung von RSpec
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Ruby on Rails] Ein Memorandum mit Layoutvorlagen
Ruby on Rails So implementieren Sie die automatische Adresseneingabe
[Ruby on Rails] Nachbearbeitungsfunktion (Aktualisieren, Löschen)
[Ruby on Rails] Individuelle Anzeige von Fehlermeldungen
Implementierung der Ajax-Entfernung in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
Ruby on Rails Lernrekord -2020.10.03
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)