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
Zu jedem Modell hinzugefügt.
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
#Folgen has_many :follower, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy
has_many :followed, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy
has_many :follower_user, through: :followed, source: :follower
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
def follow(user_id)
follower.create(followed_id: user_id)
end
def unfollow(user_id)
follower.find_by(followed_id: user_id).destroy
end
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
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
end
def folgte der folgenden Liste user = User.find(params[:user_id]) @users = user.follower_user
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
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 %>
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>
Keine Benutzer p> <% end %>
Recommended Posts