2009-11-15 4 views
1

J'ai un AudioFile qui a beaucoup de photos. Une photo a un attribut "primaire" (0 ou 1 dans db) Qu'est-ce qu'une façon idiomatique ruby ​​de faire quelque chose comme ceci: Je veux avoir une méthode sur l'AudioFile qui retourne l'ID de la photo primaire, c'est à dire la photo l'attribut principal a la valeur true.itérer sur une collection et renvoyer l'élément correspondant

Répondre

1

Généralement, la meilleure pratique consiste à configurer un named_scope dans votre modèle Photo.

class Photo < ActiveRecord::Base 
    named_scope :primary, :conditions => {:primary => true} 
end 

Ensuite, vous pouvez appeler la portée principale sur vos assocations de photos. par exemple.

@audio_file.photos.primary.first 

Vous pouvez également l'inclure dans une méthode auxiliaire.

def primary_photo 
    photos.primary.first 
end 

Voir http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html pour plus de détails et d'exemples ou google named_scope.

1

Je ne sais pas si c'est ce que vous voulez dire, mais Enumerable#Select vous donnera tous les éléments d'un objet énumérable correspondant à un cas (donné dans un bloc).

+1

donc je peux écrire def primary_photo self.photos.select {| element | element.primary = 'true'} fin – rordude

Questions connexes