est ici intéressante pour vous les gens ...HABTM vérification de la correspondance des 3 dernières
J'ai un HABTM (has_and_belongs_to_many) relation entre « Dogs » et « Voyages ». Mon but est de trouver deux ensembles de résultats: 1) Les chiens qui ont été au moins 1 des 3 derniers voyages et appellent cela @dogs_current 2) Les chiens qui n'ont pas été sur l'un des 3 derniers voyages et appellent cela @dogs_old
Je trouve que je peux trouver ce que les 3 derniers voyages sont en faisant cela dans le modèle de voyage:
named_scope :last3, :order => 'date DESC', :limit => 3
mais pas sûr de savoir comment utiliser cette liste se 1 et 2. ce hack fonctionne, mais il semble moche. Il doit y avoir un meilleur moyen! :)
@dogs_current = []
@dogs_old = []
@dogs.each do |dog|
if (Trip.last3 - dog.trips).size < 3 then
@dogs_current << dog
else
@dogs_old << dog
end
end
Des idées? Merci! -Cam
Cela semble très proche. Il a rencontré une erreur avec dogs_trips.id que j'ai dû modifier dans dogs_trips.trip_id dans la section conditions. Le seul problème avec le résultat était qu'il me donne plusieurs valeurs pour chaque chien pour chaque voyage où ils étaient. Si un chien était sur les 3 derniers voyages, ils sont retournés 3 fois. Peut-être que je peux ajouter un paramètre "unique" quelque part? – Cameron
Désolé, mon erreur! J'ai édité ma réponse. Les résultats dupliqués étaient dus aux 'jointures '. –
Après avoir effectué vos dernières modifications, cela fonctionne très bien pour dogs_current. Cependant, le code est le même pour les dogs_old. Est-ce que ce devrait être quelque chose comme "NOT IN (?)" Pour ça? J'ai essayé cela, mais le résultat a été mélangé avec des chiens qui étaient et n'étaient pas dans les 3 derniers voyages. Toute aide appréciée! :) – Cameron