Supposons que le modèle X comporte un grand nombre d'Y et que le modèle Y soit associé à X. Chaque Y a une date à laquelle il a été inséré dans la base de données. Maintenant, est-il possible de charger tous les X et de charger impatiemment Y pour chacun des X (seulement le dernier parce que chaque X a des bazzilions de Ys)?Désireux de charger le dernier enregistrement subordonné
4
A
Répondre
4
Oui,
permet de prendre cet exemple
class Song < ActiveRecord::Base
has_many :votes
end
class Vote < ActiveRecord::Base
belongs_to :song
end
Ajouter une nouvelle association à la chanson:
has_one :last_vote, :class_name => 'Vote', :order => 'created_at DESC'
cette nouvelle association retournera toujours le vote le plus récemment créé pour une chanson .
Pour charger impatient il:
songs = Song.find(:all, :conditions => 'artist_name = "frank"', :include => :last_vote)
0
La solution précédente est vraiment super! Cependant, je cherche une fonctionnalité plus: est-il possible de charger impatiemment le dernier enregistrement subordonné avant une date spécifique? Ceci est nécessaire pour que mes utilisateurs puissent parcourir l'historique des votes d'une chanson (avec des liens vers les jours précédents et suivants).
Questions connexes
- 1. Affirmer le dernier enregistrement dans le tableau
- 2. Désireux de charger la collection enfant avec NHibernate
- 3. Comment obtenir le premier et le dernier enregistrement de DB
- 4. SQL dernier enregistrement par foreign_key
- 5. obtenir le dernier enregistrement de la table requête de sélection
- 6. Comment cacher le dernier enregistrement pour chaque personne?
- 7. Obtenir le dernier enregistrement pour chaque date d'une table
- 8. LINQ to SQL désireux de chargement avec des conditions
- 9. Dernier enregistrement d'une table de jointure (comment optimiser)
- 10. Désireux de charger les collections enfant et enfant de l'enfant dans NHibernate
- 11. Supprimer un enregistrement LINQ to SQL sans le charger d'abord
- 12. Désireux de charger un named_scope à partir d'une association dans Rails
- 13. Informix: comment obtenir un identifiant du dernier enregistrement inséré
- 14. Comment faire Google Adsense charger dernier après le reste de la page
- 15. Comment obtenez-vous le dernier enregistrement généré dans un CTE récursive?
- 16. Requête SCCM: Comment obtenir le dernier enregistrement de connexion utilisateur (le cas échéant) et affichage PC, IP, utilisateur, logontimestamp
- 17. Enregistrement du dernier élément sélectionné sur une zone de liste déroulante
- 18. Lire le dernier lineof le fichier
- 19. Charger le fichier XML contenant 300 éléments pour chaque enregistrement dans db
- 20. requêtes désireux de chargement avec Gorm/Mise en veille prolongée
- 21. Charger le nom de l'imprimante
- 22. std :: string effacer le dernier caractère échoue?
- 23. Comment obtenir le chemin uniquement sans dernier \?
- 24. Forum, obtenir le dernier message/sujet
- 25. le mois dernier dans VBA Excel
- 26. CSS et en sélectionnant le dernier td
- 27. Forum Structure Obtenir le Dernier Message
- 28. Comment obtenir le dernier objet dans une liste générique?
- 29. Calculer le dernier jour du trimestre COURANT
- 30. Comment obtenir le dernier numéro de révision de SharpSVN?
Il serait intéressant de voir la jointure générée par cette requête. :) Il vaudra probablement mieux dénormaliser un peu et ajouter un champ à Song, last_vote_id, mis à jour chaque fois qu'un nouveau vote est ajouté. Just: include =>: last_vote par la suite, pas de chargement de données superflues (ou GROUP BY, si intelligent) nécessaire. – vladr
Vrai, mon code ci-dessus est totalement non testé. Vlad, votre solution semble être une amélioration par rapport à la mienne. – Tilendor
Cela permettra toujours de précharger tous les votes pour chaque chanson, et pas seulement le premier. Cela va générer une requête comme SELECT "votes". * FROM "votes" WHERE "votes". "Song_id" IN (1,2,3,4,5) ordre par created_at DESC –