J'utilise Devise pour authentifier les utilisateurs. J'ai besoin d'afficher/cacher les données basées sur la colonne global_location_id dans toutes mes tables. La valeur de global_location_id va provenir de current_user.global_location_id. J'ai essayé d'ajouter un champ par défaut suivant à l'un de mes modèles:Paramètre dans la portée par défaut dans le modèle
class Artifact < ActiveRecord::Base
default_scope where(:global_location_id => current_user.global_location_id)
Mais il donne l'erreur suivante:
undefined local variable or method `current_user' for #<Class:0x8721840>
Pour contourner la non-disponibilité de current_user dans les modèles j'ajoutés à la suite de mon contrôleur d'application
class ApplicationController < ActionController::Base
def set_global_location_id
@global_location_id = current_user.global_location_id
end
et a appelé la méthode de mon contrôleur
class ArtifactsController < ApplicationController
#Check to see if the user is logged in first
before_filter :authenticate_user!
before_filter :set_global_location_id
Changé la portée par défaut dans le modèle d'ajouter @global_location_id
class Artifact < ActiveRecord::Base
default_scope where(:global_location_id => @global_location_id)
Mais cela ne fonctionne pas non plus. L'emplacement @global_location_id est correctement défini dans le contrôleur d'application. Mais il est vide dans le modèle. Comment le faire fonctionner.