- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
lambda { s-6ren">
这是我的众多过滤器之一:
filter(:item_id, :enum,
:header => "Category",
:select => lambda { scope.select(" distinct(category.title), transactions.item_id ").map {|p| [p.title, p.item_id]}},
:multiple => false,
:include_blank => true
) do |value|
self.where(:items => { :id => value } )
end
如您所见,它正在从数据库中调用类别(所有类别)
在我的 SalesReportController 报告中,我有这个:
def index
user_acls = find_current_user_acls
@grid = SalesReportsGrid.new(params[:sales_reports_grid]) do |scope|
scope.where("access_lists.id" => user_acls).page(params[:page])
end
@grid.assets
end
这将给我生成网格并传递给 View 的范围。
现在我需要设置过滤器以仅显示该用户已售出的类别。
我需要做的是以某种方式将 user_acls
传递给 SalesReportsGrid
类
如果我可以传递 user_acls
那么我可以这样做:
filter(:item_id, :enum,
:header => "Category",
:select => lambda { scope.select(" distinct(category.title), transactions.item_id ").where("access_lists.id" => user_acls).map {|p| [p.title, p.item_id]}},
:multiple => false,
:include_blank => true
) do |value|
self.where(:items => { :id => value } )
end
快速解释:
例如:
User1 是代理她售出了 4 个类别的 100 件商品。她转到报告页面。目前,基于上面的代码,我只向她展示了她自己出售的商品,但是过滤器下拉列表包含数据库中的所有类别,这些类别没有意义。
不幸的是,我的 ACL 模块有点细化,当我尝试在 SalesReportsGrid
(sales_reports_grid.rb
) 中扩展它时,某些方法出现未定义错误。这是因为我的 Authentication 模块有很多来自其他模块的其他方法,例如 Devise 和 Declarative Authorization。所以我认为 extend 不会成为这里的一个选项。提前致谢
编辑:
在 Controller 中:
def index
# This will return an array of ACL ids for the user
user_acls = find_current_user_acls
@grid = SalesReportsGrid.new(params[:sales_reports_grid].merge(user_acls: user_acls)) do |scope|
scope.where("access_lists.id" => user_acls).page(params[:page])
end
@grid.assets
end
除了我得到的错误:undefined method merge for nil:NilClass
params[:sales_reports_grid]
中没有任何内容,这就是我收到错误的原因。
当我单独使用此 SalesReportsGrid.new(user_acls: user_acls )
时,我得到了结果。
我猜这是我的 ActiveRecord 的限制:(
我在 SalesGrid attr_accessor :user_acls
中添加了这个
谢谢
所有工作伙伴:
请你解释一下我无法理解的一点:当我添加这个时::select => lambda { scope.select("distinct(categories.title), transactions.item_id ").where("access_lists.id"=> :user_acls).map {|p| [p.title, p.item_id]} }
:user_acls
值从未返回,但是当我这样做时:
def categories_select
scope.select(" distinct(category.title), transactions.item_id ").where("access_lists.id" => user_acls).map {|p| [p.title, p.item_id]}
end
并添加 :select => :categories_select
一切正常。
干杯。
最佳答案
您可以将任何对象传递给 Datagrid 对象。
例如 current_user、ALC 对象或可访问类别。
因此在您的情况下,解决方案如下所示:
class SalesReportsGrid
scope { ... }
attr_accessor :user_ucls
filter(:item_id, :enum, select: :categories_select, ...) do
...
end
def categories_select
scope.select(" distinct(category.title), transactions.item_id ").where("access_lists.id" => user_acls).map {|p| [p.title, p.item_id]}
end
end
SalesReportsGrid.new(params.fetch(:sales_reports_grid, {}).merge(user_acls: user_acls))
请注意,为了从 select
选项访问网格对象数据,您需要将其提取到一个方法中。
您提到的错误是由 Nil 类限制引起的:nil.merge({})
。为了避免这种情况,请使用 fetch
方法将默认值添加到 Hash,如上例所示。
关于ruby-on-rails - 如何根据 Rails 中的当前范围修改数据网格上的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204441/
我不能解决这个问题。和标题说的差不多…… 如果其他两个范围/列中有“否”,我如何获得范围或列的平均值? 换句话说,我想计算 A 列的平均值,并且我有两列询问是/否问题(B 列和 C 列)。我只希望 B
我知道 python 2to3 将所有 xrange 更改为 range 我没有发现任何问题。我的问题是关于它如何将 range(...) 更改为 list(range(...)) :它是愚蠢的,只是
我有一个 Primefaces JSF 项目,并且我的 Bean 注释有以下内容: @Named("reportTabBean") @SessionScoped public class Report
在 rails3 中,我在模型中制作了相同的范围。例如 class Common ?" , at) } end 我想将公共(public)范围拆分为 lib 中的模块。所以我试试这个。 module
我需要在另一个 View 范围 bean 中使用保存在 View 范围 bean 中的一些数据。 @ManagedBean @ViewScoped public class Attivita impl
为什么下面的代码输出4?谁能给我推荐一篇好文章来深入学习 javascript 范围。 这段代码返回4,但我不明白为什么? (function f(){ return f(); functio
我有一个与此结构类似的脚本 $(function(){ var someVariable; function doSomething(){ //here } $('#som
我刚刚开始学习 Jquery,但这些示例对我帮助不大...... 现在,以下代码发生的情况是,我有 4 个表单,我使用每个表单的链接在它们之间进行切换。但我不知道如何在第一个函数中获取变量“postO
为什么当我这样做时: function Dog(){ this.firstName = 'scrappy'; } Dog.firstName 未定义? 但是我可以这样做: Dog.firstNa
我想打印文本文件 text.txt 的选定部分,其中包含: tickme 1.1(no.3) lesson1-bases lesson2-advancedfurther para:using the
我正在编写一些 JavaScript 代码。我对这个关键字有点困惑。如何在 dataReceivedHandler 函数中访问 logger 变量? MyClass: { logger: nu
我有这个代码: Public Sub test() Dim Tgt As Range Set Tgt = Range("A1") End Sub 我想更改当前为“A1”的 Tgt 的引
我正忙于此工作,以为我会把它放在我们那里。 该数字必须是最多3个单位和最多5个小数位的数字,等等。 有效的 999.99999 99.9 9 0.99999 0 无效的 -0.1 999.123456
覆盖代码时: @Override public void open(ExecutionContext executionContext) { super.open(executio
我想使用 preg_match 来匹配数字 1 - 21。我如何使用 preg_match 来做到这一点?如果数字大于 21,我不想匹配任何东西。 example preg_match('([0-9]
根据docs range函数有四种形式: (range) 0 - 无穷大 (range end) 0 - 结束 (range start end)开始 - 结束 (range start end st
我知道有一个UISlider,但是有人已经制作了RangeSlider(用两个拇指吗?)或者知道如何扩展 uislider? 最佳答案 我认为你不能直接扩展 UISlider,你可能需要扩展 UICo
我正在尝试将范围转换为列表。 nums = [] for x in range (9000, 9004): nums.append(x) print nums 输出 [9000] [9
请注意:此问题是由于在运行我的修饰方法时使用了GraphQL解析器。这意味着this的范围为undefined。但是,该问题的基础知识对于装饰者遇到问题的任何人都是有用的。 这是我想使用的基本装饰器(
我正在尝试创建一个工具来从网页上抓取信息(是的,我有权限)。 到目前为止,我一直在使用 Node.js 结合 requests 和 Cheerio 来拉取页面,然后根据 CSS 选择器查找信息。我已经
我是一名优秀的程序员,十分优秀!