2010-08-06 8 views
1
named_scope :all_public, lambda { |users| 
     { :conditions => ["visibility = ? || (visibility = ? && user_id = ?)", Shared::PUBLIC, Shared::PRIVATE, users] } 
    } 

Cela fonctionne bien pour un utilisateur, mais y a-t-il un moyen de le modifier pour fonctionner où les utilisateurs sont un tableau d'utilisateurs?Ruby on Rails: portée nommée avec lambda et un tableau

+0

Est-ce vraiment '||' et '' && et non '' OR' et et'? – bjg

+0

Quand j'ai appris le SQL, j'ai utilisé les symboles au lieu des mots. = \ mais je suppose que MySQL peut faire les deux. – NullVoxPopuli

Répondre

1

Quelque chose comme ça, et puis juste passer un tableau à un seul élément pour le cas d'identification unique

named_scope :all_public, lambda { |users| 
     { :conditions => ["visibility = ? OR (visibility = ? AND user_id IN (?))", Shared::PUBLIC, Shared::PRIVATE, users.join(',')] } 
    } 
+0

Je pense que vous auriez besoin de collecter les ID pour que cela fonctionne: users.collect (&: id) .join (',') – mark

+0

@mark Oui, vous seriez correct si l'argument était un tableau de 'User' objets mais j'ai compris à partir de la question que ce serait un tableau d'ID. De toute façon, je suis d'accord, l'appelant doit faire le 'collect' soit avant ou à l'intérieur de la portée nommée – bjg

+0

Vous avez raison, si elle devait fonctionner pour un seul utilisateur, il aurait également eu besoin d'un identifiant. La convention de nommage est à blâmer. :) – mark