2010-11-05 70 views
0

我希望能够创建一个字符串作为%%变量%%,并将它解释为方法对象而不是字符串对象。因此,%% UserDatabase.name %%将被读为@ DatabaseUser.name,并随后返回类似“Michael”的内容。把一个变量字符串变成一个严格的对象

这是我到目前为止有:

def parse_block(component) 
    component.gsub!(/%%([a-z].*)%%/s, "@#{'\\1'}") 
end 

任何帮助,将不胜感激。谢谢

回答

1

我认为最好在重新注入之前解释它。

def parse_block(component) 
    component.gsub!(/%%([a-z].*)%%/s) do |c| 
    eval($1) 
    end 
end 

但这是一个非常糟糕的主意,如果字符串不安全,您可能会遇到一些安全问题。

0

也许您可以传递一个模型名称,模型ID和所需的方法?所以你最终会以

def parse_whatever(model_name, model_instance_id, method) 
    active_record_class = Kernel.const_get(classname) 
    active_record_instance = active_record_class.find(model_instance_id) 
    active_record_instance.send(method) 
end 
相关问题