0

我正在开发 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>"

请帮我 。

4

2 回答 2

2

将您的 html 保存为部分html.erb

@emaildata = "<%= escape_javascript(render :partial=>'some_partial_name', :locals => {:PartNoListInEmail => @PartNoListInEmail}).html_safe %>"
于 2013-04-26T13:10:17.387 回答
0

为了将字符串与 HTML 结合,您需要使用 Erb 或 Haml 之类的模板系统。如果您不打算立即将模板呈现回浏览器,您仍然可以使用 Erb 通过直接调用 Erb 来执行此操作,让它解析 HTML 字符串和变量并将结果作为字符串返回。

一旦你走上这条路,要格外小心用户提供的内容,避免任何不可信的东西。当您在 rails 中正常渲染 erb 模板时,rails 会为您做大量工作以避免此类问题,但是一旦您执行示例所示的操作,或者直接使用 Erb 解析它,您将不再受益来自 Rails 的安全检查,因此需要自己进行检查。

于 2013-04-26T13:15:06.863 回答