如何使用rails 3.2 erb中的eval在运行时执行存储在字符串中的视图代码?

我们要做的是将一大块erb代码存储在一个string ,然后在run time执行代码。 这是我们做的测试:

 1. take out a chunk of the code from a working erb file and, 2. rewrite the erb file with eval. 

以下是取出的erb代码块:

  #                 

t()是国际化的翻译方法。

这是重写后的erb文件:

  

在重写之前, chunk of code

之间。 现在变量code返回代码块的stringeval执行代码块。 但这是错误:

 (eval):1: syntax error, unexpected '<' (eval):4: syntax error, unexpected tIDENTIFIER, expecting $end 
^ Extracted source (around line #6): 4:
5: 6: 7: 8:
9:

上面的代码有什么问题? 谢谢您的帮助。

eval通过评估ruby代码来工作。

 irb(main):001:0> eval('puts "Hello World"') Hello World => nil 

转换erb模板应该使用ERB类完成

 irb(main):002:0> require 'erb' irb(main):003:0> ERB.new('<%= "Hello World" %>').result => "Hello World" 

我的猜测是code实际上是一个包含ERB模板而不是ruby代码的字符串。

尽管如此,我认为这不是一个好方法。 task.project.name可能来自可能来自用户输入的数据库。 对此进行评估似乎不是一个好主意。

可能你可以用正常的partials来解决你的问题