[RUBY] Implementierung der Ajax-Funktion (Follow Function)

Ich werde es für mich selbst zusammenstellen.

Implementierung

Modellieren

$ rails g model Relationship follower_id:integer followed_id:integer
$ rails db:migrate

Migrationsdatei

20200723070930_create_relationships.rb


class CreateRelationships < ActiveRecord::Migration[5.2]
  def change
    create_table :relationships do |t|
      t.integer :follower_id, null: false
      t.integer :followed_id, null: false

      t.timestamps
    end
  end
end

relationship.rb


class Relationship < ApplicationRecord

  #Benutzer zu folgen
  belongs_to :follower, class_name: 'User'
  #Benutzer, denen gefolgt werden muss
  belongs_to :followed, class_name: 'User'

  validates :follower_id, presence: true
  validates :following_id, presence: true

end

** Klassenname: 'Benutzer' **: bedeutet "sowohl Follower als auch Follow sind in User"


app/models/user.rb


class User < ApplicationRecord

  #Folgen Sie uns
  has_many :follower, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy

  #Holen Sie sich Follower
  has_many :followed, class_name: 'Relationship', foreign_key: 'followed_id', dependent: :destroy

  #Die Person, der Sie folgen
  has_many :following_user, through: :follower, source: :followed

  #Leute, die mir folgen (Anhänger)
  has_many :follower_user, through: :followed, source: :follower


  #Folgen Sie den Benutzern
  def follow(user_id)
    follower.create(followed_id: user_id)
  end

  #Benutzer nicht mehr folgen
  def unfollow(user_id)
    follower.find_by(followed_id: user_id).destroy
  end

  #Folgen Sie der Bestätigung
  def following?(user)
    following_user.include?(user)
  end

end

Controller-Erstellung

$ rails g controller relationships

config/routes.rb


Rails.application.routes.draw do

  post 'follow/:id', to: 'relationships#follow', as: 'follow'
  post 'unfollow/:id', to: 'relationships#unfollow', as: 'unfollow'
  get 'users/following/:user_id', to: 'users#following', as: 'users_following'
  get 'users/follower/:user_id', to: 'users#follower', as: 'users_follower'

end

users_controller.rb


class UsersController < ApplicationController

  # @Liste der Benutzer, denen dieser Benutzer folgt
  def following
    @user = User.find(params[:user_id])
    @followings = @user.following_user
  end

  # @Liste der Benutzer, die dem Benutzer folgen
  def follower
    @user = User.find(params[:user_id])
    @followers = @user.follower_user
  end

end

relationship_controller.rb


class RelationshipsController < ApplicationController

    #Folgen
    def follow
      @user = User.find(params[:id])
      current_user.follow(params[:id])
      render :create
    end
  
    #Nicht mehr folgen
    def unfollow
      @user = User.find(params[:id])
      current_user.unfollow(params[:id])
      render :destroy
    end
    
end

Durch Aufrufen von create.js.erb und destroy.js.erb mit render Sie können ohne Seitenübergänge folgen / nicht mehr folgen.


ruby:users/show.html.slim


# create.js.erb und zerstören.js.Erforderlich, um mit erb umzuschreiben
div id="follow_form"

  #Überspringen Sie teilweise den Teil der Schaltfläche "Folgen"
  = render 'relationships/follow', user: @user 

Erstellen Sie die Datei _follow.html.slim manuell im Beziehungsverzeichnis Fügen Sie die Beschreibung des Follow-Button-Teils ein, der im Teil übersprungen wurde.

ruby:relationships/_follow.html.slim


- unless user == current_user
  - if current_user.following?(user)
  
    #remote, um die js-Datei aufzurufen:Füge true hinzu
    = link_to unfollow_path(user), method: :post, remote: true, class: 'btn btn-outline-info m-0 btn-sm' do
      i.fas.fa-Benutzer folgt
  - else
  
    #remote, um die js-Datei aufzurufen:Füge true hinzu
    = link_to follow_path(user), method: :post, remote: true, class: 'btn btn-outline-success m-0 btn-sm' do
      i.far.fa-Benutzer folgen

Erstellen Sie die Datei create.js.erb manuell im Beziehungsverzeichnis

ruby:relationships/create.js.erb



# id="follow_form"Teil_follow.html.Schreiben Sie schlanken Inhalt ohne Seitenübergang neu
$('#follow_form').html("<%= j(render 'relationships/follow',{ user: @user }) %>");

Erstellen Sie die Datei destroy.js.erb manuell im Beziehungsverzeichnis

ruby:relationships/destroy.js.erb



# id="follow_form"Teil_follow.html.Schreiben Sie schlanken Inhalt ohne Seitenübergang neu
$('#follow_form').html("<%= j(render 'relationships/follow',{ user: @user }) %>");

Komplett!

Recommended Posts

Implementierung der Ajax-Funktion (Follow Function)
Implementierung der Kommentarfunktion (Ajax)
Implementierung einer ähnlichen Funktion (Ajax)
Implementierung der DM-Funktion
Schienen folgen der Funktion
[Ruby on Rails] Folgen Sie der Funktionsimplementierung: Bidirektional
Wo die Follow-Funktion implementiert ist
Implementierung der Suchfunktion
Implementierung der Bildvorschau-Funktion
Implementierung der Pagenationsfunktion
Suchfunktion [Implementierung kopieren und einfügen]
Implementierung der Ajax-Entfernung in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
Implementierung der sequentiellen Suchfunktion
Implementierung der Bildvorschau
[Rails] Implementierung der Kategoriefunktion
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Ruby on Rails] Implementierung der Kommentarfunktion
[Rails] Memo zur Implementierung der Kommentarfunktion
Fehler bei der Implementierung der Tagging-Funktion
Implementierung einer ähnlichen Funktion in Java
[Rails] Ich werde die Prozedur zum Implementieren der Follow-Funktion mit form_with erklären.
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Rails Grundgerüst für die Implementierung der CRUD-Funktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Ruby on Rails] Implementierung einer ähnlichen Funktion
Implementierung der Anmeldefunktion durch Spring Security (securityConfig)