[RUBY] Les rails suivent la fonction

① Modèle (3 étapes)

○ Créez les modèles requis (2)

  1. UTILISATEUR (créé avec devise)  2. Relationships   rails g model Relationship follower_id:integer followed_id:integer

    create_table "relationships", force: :cascade do |t| t.integer "follower_id" t.integer "followed_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end

○ Association

Ajouté à chaque modèle.

Modèle de relation [Relations.rb]

belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"

Modèle utilisateur [User.rb]

#Suivant has_many :follower, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy

Suivi

    has_many :followed, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy

#Personnes qui suivent has_many :follower_user, through: :followed, source: :follower

Personnes suivies

    has_many :following_user, through: :follower, source: :followed

: point_up: le modèle de relation peut également être divisé en "suiveur" et "suivi" En ajoutant: point_up: clé_trangère, chacun peut être obtenu via le modèle de relation.

: point_up: à travers chaque modèle source

○ Définition de méthode (3) [User.rb]

1. suivez la méthode = suivez

  def follow(user_id)
   follower.create(followed_id: user_id)
  end

2. Méthode non suivie = ne plus suivre

  def unfollow(user_id)
   follower.find_by(followed_id: user_id).destroy
  end

3. méthode suivante = Confirmez si vous suivez déjà

  def following?(user)
   following_user.include?(user)
  end

Il est utilisé lors du branchement conditionnel de l'affichage avec: point_up: html. Si l'utilisateur est inclus dans l'argument, renvoie true = Si vrai, "Ne plus suivre" s'affiche.

②Controller

○ Définition de méthode: contrôleur de relations

def create méthode #follow définie dans le modèle utilisateur à suivre current_user.follow(params[:user_id]) redirect_to request.referer # Récupère l'URL avant la transition et redirige end

def destroy # unfollow méthode non suivie définie dans le modèle utilisateur current_user.unfollow(params[:user_id]) redirect_back(fallback_location: root_path) end

def suiveur #follower list user = User.find(params[:user_id]) @users = user.following_user Méthode # .follower_user: définie dans le modèle utilisateur end

def a suivi la liste #followed user = User.find(params[:user_id]) @users = user.follower_user Méthode # .follower_user: définie dans le modèle utilisateur end

③Routing

Ajouté pour la liste de créer (suivre), détruire (ne plus suivre) et suit, les abonnés

resources :users
 resource :relationships, only:[:create, :destroy]

 get 'follows' => 'relationships#follower'
 get 'followers' => 'relationships#followed'
end

④View

・ Bouton Suivre (suivre / ne plus suivre)

Ajoutez un lien vers la pièce où vous souhaitez afficher le bouton de suivi

 <% if current_user != user %>
  <% if current_user.following?(user) %>

<% = link_to'Unfollow ', user_relationships_path (user.id), method :: delete, class: "btn btn-default"%> <% else %> <% = link_to'Follow ', user_relationships_path (user.id), method :: POST, class: "btn btn-primary"%> <% end %> <% end %>

・ Liste des suiveurs.

Créez des fichiers follower.html.erb et follow.html.erb dans les relations Décrit dans chaque fichier comme suit

S'il existe un utilisateur dans la branche conditionnelle de <% if @ users.count> 0%>, affichez-le avec chaque instruction. Sinon, ** Aucun utilisateur ** s'affiche

 <% if @users.count > 0 %>
   <table class="table">
    <thead>
      <tr>
        <th>name</th>
       </tr>
     </thead>
     <tbody>
       <% @users.each do |user| %>
        <tr>
           <td><%= @user.name %></td>
Nombre d'abonnés: <% = @ user.follower.count%> Nombre d'abonnés: <% = @ user.followed.count%>  <% if current_user != @user %>  <% if current_user.following?(@user) %> <% = link_to'Unfollow ', user_relationships_path (@ user.id), method :: delete, class: "btn btn-default"%> <% else %> <% = link_to'Follow ', user_relationships_path (@ user.id), method :: POST, class: "btn btn-primary"%> <% end %> <% end %> <%= link_to "Show", @user %> <% end %> <% else %>

Aucun utilisateur <% end %>

Recommended Posts

Les rails suivent la fonction
[Rails] Fonction de catégorie
[Rails] Fonction de notification
[Ruby on Rails] Suivez l'implémentation de la fonction: bidirectionnelle
Suivez l'implémentation de la fonction (Ajax)
[rails] fonction de classement des balises
Implémenter la fonction d'application dans Rails
Implémentation de la fonction de recherche floue Rails
[Rails] Implémenter la fonction de recherche d'utilisateurs
[Rails] Implémentation de la fonction de catégorie
Rails ~ Comprendre la fonction de message ~
[Rails] Fonction de panier de site EC
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémenter la fonction de publication d'images
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
Ajoutez une fonction de recherche dans Rails.
[Ruby on Rails] Introduction de la fonction de pagination
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
Créer une fonction de pagination avec Rails Kaminari
[Ruby on Rails] Fonction de sortie CSV
[Rails] Fonction de publication vocale ~ Cloudinary, CarrierWave
[Rails] Fonction de commentaire (enregistrement / affichage / suppression)
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
Implémenter la fonction de téléchargement CSV dans Rails
[Rails] Commentaire mémo de procédure d'implémentation
[Rails g. Erreur]
[Ruby on Rails] Fonction de recherche (non sélectionnée)
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Notions de base sur les rails
[Rails] Restrictions de fonction dans l'appareil (connexion / déconnexion)
API Rails
Migration des rails
[Rails] first_or_initialize