将 ruby 插值嵌入到 html 字符串(变量)的 <script> 标签中?
Embed ruby interpolation into <script> tag of html string (variable)?
我正在努力将 ruby 插值嵌入到作为 html 字符串的字符串变量中。我想这听起来有点混乱,我希望代码能帮助理解:
def devise_error_messages!
return '' if resource.errors.empty?
messages = resource.errors.full_messages
html = <<-HTML
<script type='text/javascript'>
toastr.options = {
'closeButton': true,
'debug': false,
'newestOnTop': false,
'progressBar': false,
'positionClass': 'toast-bottom-left',
'preventDuplicates': true,
'onclick': null,
'showDuration': '3000',
'hideDuration': '1000',
'timeOut': '5000',
'extendedTimeOut': '1000',
'showEasing': 'swing',
'hideEasing': 'linear',
'showMethod': 'fadeIn',
'hideMethod': 'fadeOut'
}
#{ messages.each do |m| }
toastr['error']("#{m}");
#{end}
</script>
HTML
html.html_safe
end
因此,如您所见,我正在尝试遍历 messages
数组并为每条消息生成这行 js 代码:toastr['error']("#{m}");
你能帮我正确实施吗?
您可以将 each 块移到 HTML 标签之外,并将结果简单地存储在一个字符串中,然后将该字符串附加到脚本标签中。
str = ""
messages.each do |m|
str += "toastr['error'](" + '"' + m + '"' + '); '
end
将 str
变量放在您想要的块中。
toastr.options = {
...
}
#{str}
...
我正在努力将 ruby 插值嵌入到作为 html 字符串的字符串变量中。我想这听起来有点混乱,我希望代码能帮助理解:
def devise_error_messages!
return '' if resource.errors.empty?
messages = resource.errors.full_messages
html = <<-HTML
<script type='text/javascript'>
toastr.options = {
'closeButton': true,
'debug': false,
'newestOnTop': false,
'progressBar': false,
'positionClass': 'toast-bottom-left',
'preventDuplicates': true,
'onclick': null,
'showDuration': '3000',
'hideDuration': '1000',
'timeOut': '5000',
'extendedTimeOut': '1000',
'showEasing': 'swing',
'hideEasing': 'linear',
'showMethod': 'fadeIn',
'hideMethod': 'fadeOut'
}
#{ messages.each do |m| }
toastr['error']("#{m}");
#{end}
</script>
HTML
html.html_safe
end
因此,如您所见,我正在尝试遍历 messages
数组并为每条消息生成这行 js 代码:toastr['error']("#{m}");
你能帮我正确实施吗?
您可以将 each 块移到 HTML 标签之外,并将结果简单地存储在一个字符串中,然后将该字符串附加到脚本标签中。
str = ""
messages.each do |m|
str += "toastr['error'](" + '"' + m + '"' + '); '
end
将 str
变量放在您想要的块中。
toastr.options = {
...
}
#{str}
...