【问题标题】:How can I iterate through an array in rails view?如何在 rails 视图中遍历数组?
【发布时间】:2014-05-25 02:37:25
【问题描述】:

我在 MySql 中进行了查询,但在 Rails 和 mysql2 gem 中工作。

这里是信息:

http://sqlfiddle.com/#!2/9adb8/6

查询工作正常,没有问题并显示以下结果:

 UNIT  V1  A1  N1   V2 A2  N2   V3  A3  N3   V4  A4  N4   V5  A5  N5
 LIFE  2   0   0    1   2  0    0   0   0     0   0   0   0    0   0
 ROB   0   1   0    0   1  2    0   0   0     0   0   0   0    0   0 

-为 rails 2.3.8 安装了 mysql2 gem

gem install mysql2 -v0.2.6

-创建控制器:

class PolicyController < ApplicationController

   def index
      @result =  ActiveRecord::Base.connection.execute("select distinct @sql := concat('SELECT pb.name as unit,',group_concat(concat('SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,',SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,',SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),' FROM cia_ensures ce LEFT JOIN policies p on ce.id = p.cia_ensure_id INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id  INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id AND ca.id=1  Group by p.policy_business_unit_id') from cia_ensures where id in(1,2,3,4,5);")
      @result2 = ActiveRecord::Base.connection.execute("prepare stmt from @sql;")
      @result3 = ActiveRecord::Base.connection.execute("execute stmt;")
   end

end

这是日志:

SQL (0.9ms)   select distinct @sql := concat('SELECT pb.name as unit,',group_concat(concat('SUM(CASE WHEN p.state =0 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS v',id,',SUM(CASE WHEN p.state =1 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS a',id,',SUM(CASE WHEN p.state =2 AND ce.id=',id,' THEN 1 ELSE 0 END ) AS n',id)),' FROM cia_ensures ce LEFT JOIN policies p on ce.id = p.cia_ensure_id INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id AND ca.id=1 Group by p.policy_business_unit_id') from cia_ensures where id in(1,2,3,4,5);
SQL (0.9ms)   prepare stmt from @sql;
SQL (0.2ms)   execute stmt;

这是视图(工作正常且没有问题,但似乎太长了多次编写相同的代码)

<table>
  <% @result3.each do |policy| %>
  <tr>
      <td><%= policy[0] %></td>
      <td><%= policy[1] %></td>
      <td><%= policy[2] %></td>
      <td><%= policy[3] %></td>
      <td><%= policy[4] %></td>
      <td><%= policy[5] %></td>
      ...
  </tr>
  <%end%> 
</table>

我尝试使用检查,但它在一个 td 中而不是在每个 td 中显示所有信息:

<% @result3.each do |policy| %>
<tr>      
 <td align="center"><%= policy.inspect %></td>
</tr>
<%end%> 

如何在不写很多行的情况下显示所有这些内容?

是否可以在一行中完成?不写

请问有人可以帮我解决这个问题吗?

我会很感激的。

【问题讨论】:

  • 你能检查'@result3'并显示内容吗?
  • 是的,我试过了,但它显示在一个 td 中而不是每个 td 中
  • 你不能在每个策略对象上使用 each,就像使用 @result3 一样吗?
  • 是的,但是如果我有 100 列会怎样?这是一个很长的代码

标签: ruby-on-rails ruby ruby-on-rails-2 mysql2


【解决方案1】:

嗯,可能误解了你的问题,因为它看起来很简单,你想缩短这个吗?

变化:

<td><%= policy[0] %></td>
<td><%= policy[1] %></td>
<td><%= policy[2] %></td>
<td><%= policy[3] %></td>
<td><%= policy[4] %></td>
<td><%= policy[5] %></td>

收件人:

<% policy.each do |p| %>
  <td><%= p %></td>
<% end %>

【讨论】:

    【解决方案2】:

    这样做

      <% @result3.each do |policy| %>
      <tr>
          <% policy.each { |p| raw "<td>#{p}</td>" } %>
      </tr>
      <%end%>
    

    【讨论】:

      【解决方案3】:

      只需遍历每个 policy 对象中的每个集合。

      <table>
        <% @result3.each do |policy| %>
            <tr>
                <%policy.each do |item| %>
                    <td><%= item %></td>
                <%end%>
            </tr>
        <%end%> 
      </table>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2016-12-13
        • 2017-03-03
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多