【发布时间】:2016-03-21 18:13:03
【问题描述】:
我知道如何检查 lambda 的数量,但我不知道如何从范围中提取它。
这个问题是 4 年前提出的:
https://groups.google.com/forum/#!topic/rubyonrails-core/7Cs0T34mj8c
所有,在对元搜索 gem 进行更改的过程中 我遇到了范围实施方式的问题 活动记录。为了在搜索中包含范围,我们传递名称 搜索方法的范围,如下所示:
{:name_of_my_scope => 1}。 元搜索自动将"1"作为参数传递给范围。 这会导致ArgumentError带有不带 争论。我的意图是在调用和 如果范围没有参数,则删除
"1"。我的 问题是范围的实现将范围选项包装在一个 将 *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
在调用它之前,它会在寻找作用域的数量方面寻求帮助。
找到解决办法了吗?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord