2010-09-13 4 views
0

J'essaie de créer une portée sur un de mes modèles en limitant les résultats disponibles à ceux qui sont la propriété du partenaire de l'utilisateur. Lorsque l'utilisateur est un administrateur, je souhaite que tous les modèles soient disponibles. Cela fonctionne, mais semble stupide. Quelle est la bonne façon de l'exprimer par rails3?rails3 est-il possible de créer un modèle.scope sans contraintes

scope :accessible_by, proc { |user| 
    if user.admin? 
    where("1=1") 
    else 
    where(:owner_id => user.partner.id) 
    end 
} 

Ce que je veux être en mesure de faire est de sélectionner et de faire plus par exemple

@models = MyModel. 
      accessible_by(current_user). 
      other_scope. 
      where(:property => value). 
      order("another_property desc"). 
      all 

Répondre

1

Vous pourriez être en mesure d'utiliser le tout modificateur.

scope :accessible_by, proc { |user| 
    if user.admin? == false 
    where(:owner_id => user.partner.id) 
    end 
} 
+0

Ne connaissait pas #all. Merci! –

+0

qui déclenche la requête cependant, et ne me laisse pas construire plus loin – einarmagnus

+1

N'a même pas besoin de tout. Il suffit de ne pas spécifier une autre condition. Tout ce que fait une portée nommée est simplement déclencher une méthode dans l'objet ActiveRecord. Par exemple, si l'utilisateur.admin? == false alors vous voulez déclencher la méthode where ... Sinon, vous n'avez pas besoin de virer sur une clause where. – davydotcom

Questions connexes