我想在运行时发现查询范围应接收的参数数量。
我尝试了以下方法:
class Test < ActiveRecord::Base
scope :my_scope, Proc.new{ |q, x|
where("attr = ? and attrb = ?", q, x)
}
def self.my_scope_args
self.method(:my_scope).parameters
end
end
但是打电话
Test.my_scope_args
返回 [[:rest, :args]]。如果我直接反映在 Proc 对象上,我会得到想要的结果:
Proc.new{ |q, x|
where("attr = ? and attrb = ?", q, x)
}.parameters
返回 [[:opt, :q], [:opt, :x]]
有一种方法可以获得对范围的基础 Proc 对象的引用,以便我可以对其进行反思?