在不同的上下文中评估proc对象

时间:2015-02-06 01:04:05

标签: ruby

下面我在控制台中创建一个proc对象:

2.1.2 :050 > p = Proc.new { where(id: 1)}

不会抛出错误,因为未评估proc对象。它只是存储代码块。

现在我想在Practice ActiveRecord对象的上下文中评估该块代码。我尝试以下方法:

2.1.2 :051 > Practice.instance_eval { p.call } 
NoMethodError: undefined method `where' for main:Object

为什么我得到主要的未定义方法:对象。这应该在Practice的上下文中进行评估,而不是main:Object。

我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

我能让它工作的唯一方法是将参数传递给proc:

@collection = model.send query_conditions.collect {|proc| proc.call model }

Proc.new { |model| model.where("#{key} >= #{value[condition]} AND #{key} <= #{value[condition]}") }

答案 1 :(得分:0)

您必须将Proc作为参数传递,以便在该上下文中执行。

Practice.instance_eval(&p)