Rails 3 concevoir, current_user n'est pas accessible dans un Modèle ?
dans mon projet.rb modèle, je suis en train de créer un champ avec une variable dynamique:
scope :instanceprojects, lambda {
where("projects.instance_id = ?", current_user.instance_id)
}
J'obtiens l'erreur suivante:
undefined local variable or method `current_user' for #<Class:0x102fe3af0>
Où dans le contrôleur, je peux accéder à current_user.instance_id
... Est-il une raison pour laquelle le modèle ne pouvez pas y accéder et un moyen pour obtenir l'accès? Aussi, est-ce le bon endroit pour créer un champ d'application comme ci-dessus, ou n'appartenant dans le contrôleur?
Vous devez vous connecter pour publier un commentaire.
Cela ne fait pas beaucoup de sens, comme vous l'avez déjà fait. Le current_user n'appartient pas au modèle de la logique, elle doit être traitée sur le contrôleur de niveau.
Mais vous pouvez toujours créer portée comme ça, il suffit de passer le paramètre à partir du contrôleur:
Maintenant, vous pouvez appeler dans le contrôleur:
Project.of current_user
->
les paramètres sont passés dans les choses différemment->(user){ ... }
Déjà accepté de répondre fournit une très bonne façon d'atteindre cet.
Mais voici la version thread-safe de
User.current_user
truc.Cela fonctionne comme prévu, mais il peut être considéré comme sale, parce que nous avons essentiellement de définir une variable globale ici.
Ryan Bates, établit un moyen assez sûr pour mettre en œuvre ce type de stratégie dans ce railscast
Ce payée de l'épisode (à ne pas voter de moi!) mais vous pouvez parcourir le code source gratuitement
Ici, il crée un
current_tenant
méthode, mais vous pouvez facilement remplacercurrent_user
à la place.Voici les principaux morceaux de code...
Ensuite dans le modèle, vous pouvez faire quelque chose comme...
Vous n'avez pas besoin d'utiliser des étendues. Si vous avez défini les associations dans les modèles, à la suite de morceau de code placé dans le contrôleur devrait faire l'affaire: