44 votes

Passer les arguments dans la portée

Quelqu'un peut-il fournir un exemple sur la façon d'utiliser

scope

et les paramètres ?

Par exemple :

class Permission < ActiveRecord::Base
  scope :default_permissions, :conditions => { :is_default => true }
end

J'ai ce code qui retourne les permissions par défaut et je veux le convertir pour retourner les permissions par défaut pour un utilisateur donné (user_id).

Merci

81voto

nurinur Points 915

Nouvelle syntaxe (ruby 1.9+), qui évitera les erreurs même si vous ne fournissez pas le - utilisateur

scope :default_permissions_for, ->(user = nil) { ... }

38voto

keymone Points 3947

Utilisez des scopes lambda :

scope :default_permissions_for, lambda{|user| { :conditions => { :user_id => user.id, :is_default => true } }

Faites attention car si vous ne passez pas de paramètre à une lambda alors qu'elle en attend un, une exception sera levée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X