所以我将这段代码存储在我的数据库中:
def is_ten?(number)
number == 10
end
is_ten?(10)
现在我从属于存储它的模型的类方法中引用它。
class Snippet < ApplicationRecord
def self.run_blocks
where(active: true).each do |snip|
eval(snip.code_block)
end
end
end
返回:
NoMethodError Exception: undefined method `is_ten?' for #<Class:0x007fd11ba2bec8>
但是,如果我在控制台中这样做,它的效果非常好。有人知道如何处理这个问题吗?
答案 0 :(得分:0)
而不是eval(snip.code_block
,您应该尝试:
snip.instance_eval(code_block)
希望这可以开箱即用,但如果没有,你可能需要尝试define_method
。
你的代码片段与eval
不兼容的原因是1)Ruby不支持嵌套方法,2)你试图从类方法调用实例方法。另一方面,如果你的代码看起来像:
def self.is_ten?(number)
...
你可能会有更好的运气,但你仍然可能会遇到第一个问题。
正如@Mark Thomas所观察到的,这对于生产代码(或者,实际上是任何代码)来说都是一个非常糟糕的主意。即使它不是用于生产用途,也可能是whatever problem you're trying to looking to solve with this question isn't actually the real problem you're looking to solve.