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
Ajouté à chaque modèle.
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
#Suivant has_many :follower, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy
has_many :followed, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy
#Personnes qui suivent has_many :follower_user, through: :followed, source: :follower
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
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
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
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
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 %>
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>
Aucun utilisateur p> <% end %>
Recommended Posts