Souvent sur des sites avec des éléments frima tels que Mercari et Jimoty En dehors de la liste des transactions que j'ai répertoriées sur Ma page La «liste des transactions en cours» est souvent affichée, n'est-ce pas?
Il est assez difficile de mettre en signet chaque transaction, donc N'est-ce pas une fonction utile?
Aujourd'hui, je voudrais le mettre en œuvre pour y arriver.
Comme dans l'exemple, l'article (transaction) est un article et le commentaire (échange) est un commentaire. Chaque modèle doit être associé comme ci-dessus.
user.rb
has_many :articles
has_many :comments
article.rb
belongs_to :user
has_many :comments
comment.rb
belongs_to :user
belongs_to :article
application_controller.rb
helper_method :current_user
private
def current_user
if session[:user_id]
@current_user ||= User.find_by(id: session[:user_id])
end
end
En supposant qu'il existe une méthode d'assistance utilisateur_actuel
qui renvoie l'utilisateur connecté comme décrit ci-dessus,
Obtenez les articles que vous avez commentés sur @ article_commented_on
.
home_controller.rb
def mypage
@article_commented_on = current_user.messages.includes(:article).map(&:article).uniq
end
Obtenez tous les commentaires publiés par l'utilisateur avec current_user.messages
Utilisez includes (: article)
pour joindre une table avec un article.
Ensuite, utilisez map (&: article)
pour renvoyer uniquement l'article vers le nouveau tableau extrait.
Exécutez uniq
(une méthode d'un tableau qui n'est pas une méthode d'interrogation) pour éliminer les doublons.
En faisant cela, j'ai pu obtenir uniquement les articles que j'avais commentés dans @ article_commented_on
.
En faisant une jointure de table avec includes (: article)
Vous pouvez minimiser l'accès à la base de données qui se produit chaque fois que vous obtenez l'article correspondant à chaque message.
C'est tout, merci pour votre travail acharné!
Recommended Posts