在ruby中的一个块中执行两个do语句

时间:2016-05-15 05:02:07

标签: html mysql ruby sinatra

我试图在一个代码块中为表执行两个.each do语句。我从一个数据库表中提取问题我从另一个数据库表中提取答案,最后我现在试图从第三个表中提取问题。这是我的一部分。它可以与一个或另一个语句一起工作,但我需要能够拉出所有三个表并能够遍历每个数据库并让它填写我的表中有多少信息

<table id="table1" cellspacing="0" class="mytable" >

<% dataQ.each do |dataQ| %>
  <th><strong> <%=dataQ[1]%> </strong></th>     
<%end%> 

<% data.each do |data|%> 
  <% dataC.each do |dataC| %>

    <tr>
      <td><%=data[0]%></td> <td><%=data[1]%></td><td><%=data[2]%></td><td><%=data[3]%></td><td><%=data[4]%></td>
      <td><%=data[5]%><div class="accordion">Comment</div><div class="panel"><%=dataC[0]%></div></td>
      <td><%=data[6]%><div class="accordion">Comment</div><div class="panel"><%=dataC[1]%></div></td>
      <td><%=data[7]%><div class="accordion">Comment</div><div class="panel"><%=dataC[2]%></div></td>
      <td><%=data[8]%><div class="accordion">Comment</div><div class="panel"><%=dataC[3]%></div></td>
    </tr>

  <% end %>
<% end %>
</table>

和一些sinatra

get '/display' do

  dataQ = database.execute("select * from Questions");
  data = database.execute("select * from results");
  dataC = database.execute("select * from Comments")        

  erb :display, :locals => {:data => data, :dataQ => dataQ, :dataC =>   dataC}

end

2 个答案:

答案 0 :(得分:1)

如果我理解正确 - 您的datadataC数组是嵌套的,那么只要它们长度相同,您就可以尝试:

<% 0.upto(data.length - 1) do |index| %>
  <tr>
    <td><%=data[index][0]%></td>
    <td><%=data[index][1]%></td>
    <td><%=data[index][2]%></td>
    <td><%=data[index][3]%></td>
    <td><%=data[index][4]%></td>
    <td><%=data[index][5]%><div class="accordion">Comment</div><div class="panel"><%=dataC[index][0]%></div></td>
    <td><%=data[index][6]%><div class="accordion">Comment</div><div class="panel"><%=dataC[index][1]%></div></td>
    <td><%=data[index][7]%><div class="accordion">Comment</div><div class="panel"><%=dataC[index][2]%></div></td>
    <td><%=data[index][8]%><div class="accordion">Comment</div><div class="panel"><%=dataC[index][3]%></div></td>
  </tr>
<% end %>

答案 1 :(得分:0)

由于上面的评论,我在搜索了一个更好的短语之后最终搞清楚了:)所以使用.zip方法就像一个魅力马上工作

<% dataQ.each do |dataQ| %>
  <th><strong> <%=dataQ[1]%> </strong></th>


<%end%> 

<% data.zip(dataC).each do |data,dataC|%> 

<tr>
  <td><%=data[0]%></td> <td><%=data[1]%></td><td><%=data[2]%></td><td><%=data[3]%></td><td><%=data[4]%></td>
  <td><%=data[5]%><div class="accordion">Comment</div><div class="panel"><%=dataC[0]%></div></td>
  <td><%=data[6]%><div class="accordion">Comment</div><div class="panel"><%=dataC[1]%></div></td>
  <td><%=data[7]%><div class="accordion">Comment</div><div class="panel"><%=dataC[2]%></div></td>
  <td><%=data[8]%><div class="accordion">Comment</div><div class="panel"><%=dataC[3]%></div></td>
</tr>

<%end%>
 </table>