[RUBY] Schienen folgen der Funktion

① Modell (3 Schritte)

○ Erstellen Sie die erforderlichen Modelle (2)

  1. USER (erstellt mit Gerät)  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

○ Assoziation

Zu jedem Modell hinzugefügt.

Beziehungsmodell [Relations.rb]

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

Benutzermodell [User.rb]

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

Gefolgt

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

Leute, die folgen

    has_many :follower_user, through: :followed, source: :follower

Menschen, denen gefolgt wird

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

: point_up: Das Beziehungsmodell kann auch in "Follower" und "Followed" unterteilt werden. Durch Hinzufügen von: point_up: Foreign_key kann jeder über das Beziehungsmodell abgerufen werden.

: point_up: Durch jedes Quellmodell

○ Methodendefinition (3) [User.rb]

1. follow method = follow

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

2. Methode nicht folgen = nicht folgen

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

3. folgende Methode = Bestätigen Sie, ob Sie bereits folgen

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

Es wird verwendet, wenn die Anzeige bedingt mit: point_up: html verzweigt wird. Wenn der Benutzer in das Argument einbezogen ist, wird true zurückgegeben. Wenn true, wird "Unfollow" angezeigt.

②Controller

○ Methodendefinition: Relationships Controller

def create #follow Methode, die im folgenden Benutzermodell definiert ist current_user.follow(params[:user_id]) redirect_to request.referer # Ruft die URL vor dem Übergang ab und leitet sie weiter end

def destroy # unfollow unfollow Methode, die im Benutzermodell definiert ist current_user.unfollow(params[:user_id]) redirect_back(fallback_location: root_path) end

def Follower #Folower Liste user = User.find(params[:user_id]) @users = user.following_user

.follower_user-Methode: Im Benutzermodell definiert

end

def folgte der folgenden Liste user = User.find(params[:user_id]) @users = user.follower_user

.follower_user-Methode: Im Benutzermodell definiert

end

③Routing

Hinzugefügt für die Liste der Follower erstellen (folgen), zerstören (nicht folgen) und folgen

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

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

④View

・ Schaltfläche Folgen (folgen / nicht folgen)

Fügen Sie einen Link zu dem Teil hinzu, in dem Sie die Schaltfläche "Folgen" anzeigen möchten

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

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

・ Follower.follows Liste

Erstellen Sie die Dateien follower.html.erb und follows.html.erb in Beziehungen In jeder Datei wie folgt beschrieben

Wenn sich im bedingten Zweig <% if @ users.count> 0%> ein Benutzer befindet, zeigen Sie ihn bei jeder Anweisung an. Wenn nicht, wird ** Kein Benutzer ** angezeigt

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

Keine Benutzer <% end %>

Recommended Posts

Schienen folgen der Funktion
[Schienen] Kategoriefunktion
[Rails] Benachrichtigungsfunktion
[Ruby on Rails] Folgen Sie der Funktionsimplementierung: Bidirektional
Implementierung der Ajax-Funktion (Follow Function)
[Rails] Tag-Ranking-Funktion
Implementieren Sie die Anwendungsfunktion in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
[Schienen] Implementieren Sie die Benutzersuchfunktion
[Rails] Implementierung der Kategoriefunktion
Schienen ~ Die Nachrichtenfunktion verstehen ~
[Rails] EC-Site-Cart-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementieren Sie die Image-Posting-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
Fügen Sie eine Suchfunktion in Rails hinzu.
[Ruby on Rails] Paging-Funktion eingeführt
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Ruby on Rails] CSV-Ausgabefunktion
[Rails] Sprachposting-Funktion ~ Cloudinary, CarrierWave
[Rails] Kommentarfunktion (Registrierung / Anzeige / Löschung)
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
Implementieren Sie die CSV-Download-Funktion in Rails
[Rails] Memo zur Implementierung der Kommentarfunktion
[Schienen g. Fehler]
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
Rails Grundlagen
[Rails] Funktionseinschränkungen im Gerät (Login / Logout)
Rails API
Schienenmigration
[Rails] first_or_initialize