我正在使用 Devise 对用户进行身份验证。我需要根据我所有表中的 global_location_id 列显示/隐藏数据。当前 global_location_id 的值将来自 current_user.global_location_id。我尝试将以下默认范围添加到我的一个模型中:
class Artifact < ActiveRecord::Base
default_scope where(:global_location_id => current_user.global_location_id)
但它给出了以下错误:
undefined local variable or method `current_user' for #<Class:0x8721840>
为了规避 current_user 在模型中的不可用性,我在我的应用程序控制器中添加了以下内容
class ApplicationController < ActionController::Base
def set_global_location_id
@global_location_id = current_user.global_location_id
end
并从我的控制器调用该方法
class ArtifactsController < ApplicationController
#Check to see if the user is logged in first
before_filter :authenticate_user!
before_filter :set_global_location_id
更改模型中的默认范围以添加 @global_location_id
class Artifact < ActiveRecord::Base
default_scope where(:global_location_id => @global_location_id)
但这也不起作用。@global_location_id 已在应用程序控制器中正确设置。但它在模型中是空的。如何使它工作。