下面我在控制台中创建一个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。
我可能做错了什么?
答案 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)