我的代码:
我仅在AuthenticationRelated
使用了ApplicationHelper
signed_in?
中的is_admin?
来自Devise Gem。
module AuthenticationRelated
def is_admin?
athu = false
if signed_in?
current_user.roles.each do |role|
if role.name == 'admin'
athu = true
end
end
end
athu
end
end
现在我有一个课程SalesReportsGrid
,我需要能够访问is_admin?
所以这就是我所做的:
class SalesReportsGrid
include Datagrid
include AuthenticationRelated
scope do
if is_admin?
Sales.joins(product: [ category: [:access_lists] ] )
else
....
end
end
....
end
现在,当我运行此操作时,我收到以下错误:
undefined method `is_admin?` for SalesReportsGrid:Class
修改
当我添加extend AuthenticationRelated
这就是我得到的:
undefined method `signed_in?` for SalesReportsGrid:Class
我真的很困惑,有人可以看看并提出建议吗? 感谢
答案 0 :(得分:1)
如果是include
模块,则将其方法添加到使用include
的类的实例中。制作模块方法'类方法' (即类的单例方法),你应该使用extend
:
extend AuthenticationRelated
答案 1 :(得分:0)
您需要明确使用current_user
来定义网格范围。
以下是示例:
def index
@grid = SalesReportGrid.new(params[:sales_report_grid]) do |scope|
unless current_user.admin?
scope.where_accessible_by(current_user)
end
end
end
它允许您更明确,不要将访问控制移动到网格,并将其保留在控制器中,就像在其他地方一样。