Tre*_*ree 1 forms rendering ruby-on-rails
我有一些html内容存储在数据库字段中.我希望我们系统中值得信赖的管理员能够在需要时编辑HTML.最终,此html将转换为电子邮件并发送给用户.除静态html内容外,电子邮件消息还具有存储在活动记录模型中的名和姓.
<%= user.firstname user.lastname %>当管理员正在编辑内容时,我希望将HTML文本留在内部,然后最终将内容与嵌入式erb电子邮件渲染器结合起来.我有管理员可以保存HTML工作正常的部分.
但是,即使忽略了电子邮件而只是尝试渲染到普通网页,我也无法获得视图以正确地将嵌入式<%= ... %>数据库替换为数据库.我总是看到<%= ... %>代替替换文本.我尝试过render_to_string,render:inline等.
总之,我想:
问题是结果总是包含<%= ... %>在内而不是替换中.
在示例控制器中,我有:
def showit
@storedhtml = mymodel.savedhtml
@emailtext = render_to_string( template: 'e.html.erb',
layout: false, locals: { user:@user })
end
Run Code Online (Sandbox Code Playgroud)
e.html.erb包含:
<%= raw @storedhtml %>
Run Code Online (Sandbox Code Playgroud)
并且showit.html.erb具有:
= raw @emailtext
Run Code Online (Sandbox Code Playgroud)
我也试过像这样使用内联:
def showit
# the line below is substituted but the <p> tags are not converted
@stuff = "<%= '<p>testme</p>' + user.firstname %>"
@storedhtml = mymodel.the_html_content
@output = render( inline: @storedhtml, locals: { user:@user }, layout: true )
end
Run Code Online (Sandbox Code Playgroud)
在控制器中你不会使用Erb语法,你可以使用普通的Ruby字符串插值:
@stuff = "#{'<p>testme</p>'} #{user.firstname}"
# Or, since the HTML isn't dynamic:
@stuff = "<p>testme</p> #{user.firstname}"
Run Code Online (Sandbox Code Playgroud)
并在您需要使用的视图中输出它html_safe:
<%= @stuff.html_safe %>
Run Code Online (Sandbox Code Playgroud)
通常,直接在控制器中生成HTML并不是一个好主意,因为还有其他机制,当您试图找出哪个组件创建哪个HTML时,它会创建另一个地方.
编辑我误解了.像Sameera建议的另一个模板引擎是一个选项,或者只是使用当前绑定将DB值评估为erb模板.
您还可以创建一个模板解析组件,如果没有找到文件,则允许直接从数据库中检索; Crafting Rails应用程序书讨论了这一点.
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |