我正在努力将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':是的,
 '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 [ '错误']( “#{M}”);
 #{端}

 < /脚本>
 HTML

 html.html_safe
结束



 因此,正如您所看到的,我正在尝试迭代 messages
数组并为每个生成消息这行js代码: toastr ['error'](“#{m}”);
你可以帮我一下吗?正确实施?

答案 0 :(得分:1)
您可以将每个块移动到HTML标记之外,只需将结果存储在字符串中,然后将该字符串附加到脚本标记内。
str = ""
messages.each do |m|
str += "toastr['error'](" + '"' + m + '"' + '); '
end
将str
变量放在您想要的块中。
toastr.options = {
...
}
#{str}
...