调用html_safe时未读取嵌入式Ruby

时间:2015-11-12 15:50:49

标签: ruby-on-rails ruby

我正在开发一个教人们英语的简单应用程序。该应用程序基于5个模块,每个模块34个类 - 共170个。每个类都有自己的html页面。

由于我不想为每个类创建一个视图,我搭建了一个Aula模型("类"用葡萄牙语)并将每个类的html保存在模型的数据库中,所以我只能使用标准的显示视图路径来显示使用其个人ID的类。

控制器代码:

 def show
  @aula = set_aula
 end

这些HTML页面作为字符串存储在数据库中,然后使用html_safe方法在Show视图中输出。

#show view code: 
<%= @aula.aula.html_safe %>
#"aula" is the DB attribute with the html of each class

它提供了HTML没有问题,我得到了我想要的。但是,由于我正在创建一个rails应用程序,我决定使用嵌入式Ruby代码,如<%= link_to %><% image_tag %>与类的HTML混合来创建链接和显示图像,问题是这些链接也作为字符串输出,就像任何其他行一样,而不是作为实际的Ruby代码读取和执行。

我一直在做很多研究,但到目前为止,我无法确切地找到如何正确读取ERB代码。

也许我需要使用其他数据类型在数据库中保存HTML,或者我需要使用其他方法来呈现HTML。

1 个答案:

答案 0 :(得分:0)

首先,我会回答你的问题,然后提出一个建议,在使用这种方法之前要仔细考虑。

帖子https://stackoverflow.com/a/14351129/483133中的答案显示了如何直接从存储的HTML文本呈现ERB。修改这个,这里有一些你可以使用的代码:

def show_html
   html = @aula.aula
   template = ERB.new(html)
   template.result.html_safe
end

# Run this from your controller action, for example, with

def show
  @aula = set_aula      
end

# inside your view show.erb.html 

<%= show_html %>

警告

我强烈建议不要找到允许运行存储在数据库中的Ruby代码的解决方案。如果最终用户能够以任何方式编写页面,而不是可信赖的软件开发人员,那么您就已经打开了一个巨大的安全漏洞。任何Ruby代码都可以在您的服务器上运行。

我建议您考虑使用客户端呈现解决方案(例如Handlebars:http://handlebarsjs.com/),它允许在HTML中动态地基本呈现数据,同时不允许在您的服务器上运行代码。 / p>