将变量字符串转换为严格对象

时间:2010-11-05 18:13:54

标签: ruby-on-rails

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

这是我到目前为止所拥有的:

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

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

2 个答案:

答案 0 :(得分:1)

我认为在重新注射它之前解释它会更好。

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

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

答案 1 :(得分: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