我知道如何检查lambda的arity,但我不知道如何从范围中提取它。
4年前问过这个问题:
https://groups.google.com/forum/#!topic/rubyonrails-core/7Cs0T34mj8c
全部,在为元搜索宝石进行更改的过程中 我遇到了实现范围的问题 ActiveRecord的。为了在搜索中包含范围,我们传递名称 搜索方法的范围如下:
{:name_of_my_scope => 1}
。 元搜索会自动将"1"
作为参数传递给范围。 这导致ArgumentError
的lambda范围不带 论点。我的意图是在调用之前检查范围的arity 如果范围没有参数,则删除
"1"
。我的 问题是,scope的实现将scope_options包装在一个 将* args传递给块的lambda(active_record / named_scope.rb: 106)。这导致对arity的调用始终返回-1,无论如何 范围定义所需的实际参数数量。是否有不同的方法来实现允许公开的范围 范围定义中的arity?
实施例。
class Post < ActiveRecord::Base scope :today, lambda {where(:created_at => (Time.new.beginning_of_day...(Time.new.end_of_day)) } end irb> Post.today.arity # => -1
它要求在调用范围之前寻找范围的帮助。
是否找到了解决方案?