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
Ne connaissait pas #all. Merci! –
qui déclenche la requête cependant, et ne me laisse pas construire plus loin – einarmagnus
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