【发布时间】:2014-08-08 03:10:29
【问题描述】:
我有一个非常精细的 ACL。我无法扩展 Grid 类以使用我的模块,所以我认为我在控制器级别强加了 ACL(访问列表)。
基本上在 sales_reports_controller.rb 我有
@grid = SalesReportsGrid.new(params[:sales_reports_grid]) do |scope|
scope.page(params[:page])
end
我只需要显示属于具有特定角色的用户的销售额。访问列表在一个数组中,如果我可以通过@grid.assets,那么我只能将记录添加到我需要的@grid 并将其传递给视图。
或者,如果我可以在获取scope 时执行循环并过滤记录。
现在我可以做这样或类似的事情吗:
aa = @grid.assets
grid = []
aa.each do |a|
if user_acls.include?(a.access_list_id)
grid.push a
end
end
@grid.assets = grid
上面的循环不会起作用,因为 assets 不会接受任何东西。我收到以下错误。
undefined method 'assets=' for #<SalesReportsGrid:0x007fe9e79203a0>
所以我最好的选择是在此处添加循环
@grid = SalesReportsGrid.new(params[:sales_reports_grid]) do |scope|
scope.page(params[:page])
end
我不知道怎么做。
谢谢。
编辑:(可能的解决方案) 我已经添加了
a = []
assets.each do |asset|
if user_acls.include?(asset.access_list_id)
a.push asset
end
end
assets = a
在视图级别,它可以工作(部分副本)。 不过,最好在控制器级别应用限制。
【问题讨论】:
标签: ruby-on-rails ruby datagrid scope