我正在rails 3应用程序上工作,我需要将html代码传递给字符串变量,并将其作为参数传递给web服务。
我有下面的代码,里面有循环,但因为它是在字符串中声明的,所以它不能处理<%%>和#{}标签
@emaildata = "<H3>FLOOR VIEW ACTION REQUEST</H3>
<table border='0' cellspacing='4'>
<tr>
<td>Submitted On:</td>
<td align='left'><strong>#{Date.today}</strong></td>
</tr>
<tr>
<td> Originator: </td>
<td align='left'><strong>#{session[:user_name]}</strong></td>
</tr>
</table>
<table border=0 width=100%>
<tr bgcolor='##006699'>
<td align='center'><font color='##FFFFFF'><strong>ACTION CODE</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>PART<BR />NUMBER</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>LOCATION</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>BIN QTY</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>PACK QTY</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>UM</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>SCAN CODE</strong></font></td>
<td align='center'><font color='##FFFFFF'><strong>REASON / COMMENTS</strong></font></td>
</tr>
<% (1..PartNoListInEmail.length).each_index do |i|%>
<tr bgcolor='##E0E5E5'>
<td align='center'>#{@ActionCodeListInEmail[i]}</td>
<td align='center'>#{@PartNoListInEmail[i]}</td>
<td align='center'>#{@SendToListInEmail[i]}</td>
<td align='center'>#{@OrderQtyListInEmail[i]}</td>
<td align='center'>#{@PackQtyListInEmail[i]}</td>
<td align='center'>#{@UMListInEmail[i]}</td>
<td align='center'>#{@ScancodeListInEmail[i]}</td>
<td align='center'>#{@reasonForActionIn[i]}</td>
</tr>
<%end%>
</table>"
请帮帮我。
另存为html.erb
@emaildata = "<%= escape_javascript(render :partial=>'some_partial_name', :locals => {:PartNoListInEmail => @PartNoListInEmail}).html_safe %>"
要将字符串与HTML组合,您需要使用Erb或Haml之类的模板系统。如果您不打算立即将模板呈现回浏览器,您仍然可以通过直接调用Erb来使用Erb,让它解析HTML字符串和变量并将结果作为字符串返回。
一旦你走上这条路,要格外小心用户提供的内容,避免任何不可信的东西。当您在rails中正常呈现erb模板时,rails为您做了相当多的工作来避免这类问题,但是一旦您做了类似示例所示的事情,或者如果您直接使用erb来解析它,您将不再受益于rails的安全检查,因此需要放入您自己的检查。