我正在开发一个教人们英语的简单应用程序。该应用程序基于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。
答案 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>