呈现存储过程中的所有记录

时间:2017-10-26 16:12:11

标签: ruby-on-rails sql-server ruby ruby-on-rails-4 stored-procedures

我试图在视图中的表中呈现存储过程的所有数据,但问题是列的名称可以在每个存储的查询中更改,因此我无法在呈现中进行特定的字段调用,因为每个查询带来不同的列,我如何调用(表标题)的列名称,并在数据名称中呈现未指定的所有数据,但带来显然返回它们的查询的所有结果阵列

这是我的stored_procedures_controller.rb

class StoredProceduresController < ApplicationController
  before_action :authenticate_usuario!


  def cantidad_productosxpedido
    @cantidad_productosxpedido = Stored_procedure.fetch_db_records("exec SPAD_ReporteProductosxPedido '#{Time.now.try(:strftime,"%Y%m%d")}','#{params[:search]}','#{params[:search6]}'")
    respond_to do |format|
      format.html
      format.js
      format.xls
    end
  end

end

这是我的模型stored_procedure.rb

class Stored_procedure < ActiveRecord::Base

  def self.fetch_db_records(proc_name_with_parameters)
    connection.select_all(proc_name_with_parameters)
  end

  def self.insert_update_delete_calculate(proc_name_with_parameters)
    connection.execute(proc_name_with_parameters)
  end

  def self.fetch_val_from_sp(proc_name_with_parameters)
    connection.select_value(proc_name_with_parameters)
  end

end

我通常以这种方式进行渲染

<table class="table table-striped table-bordered table-condensed table-hover rwd_auto">
    <thead>
      <tr>
        <th>Ruta</th>
        <th>Pedido</th>
        <th>IdCliente</th>
        <th>Cliente</th>
        <th>Nombre Comercial</th>
        <th>2010100</th>
        <th>2020100</th>
        <th>2020200</th>
        <th>2020500</th>
        <th>2021200</th>
        <th>2200500</th>
        <th>2200501</th>
        <th>2200508</th>
        <th>2200509</th>
        <th>2201000</th>
        <th>2203100</th>
        <th>2203101</th>
        <th>2203102</th>
        <th>2203104</th>
        <th>2203108</th>
        <th>2203200</th>
      </tr>
   </thead>
  <tbody id="container_productosxpedido">
    <%= render partial: "/stored_procedures/cantidad_productoxpedido", collection: @cantidad_productosxpedido %>
  </tbody>
</table>

和部分_cantidad_productoxpedido

<tr>
  <td><%= cantidad_productoxpedido['Ruta'] %></td>
  <td><%= cantidad_productoxpedido['Pedido'] %></td>
  <td><%= cantidad_productoxpedido['IdCliente'] %></td>
  <td><%= cantidad_productoxpedido['Cliente'] %></td>
  <td><%= cantidad_productoxpedido['NombreCorto'] %></td>
  <td><%= cantidad_productoxpedido['2010100'] %></td>
  <td><%= cantidad_productoxpedido['2020100'] %></td>
  <td><%= cantidad_productoxpedido['2020200'] %></td>
  <td><%= cantidad_productoxpedido['2020500'] %></td>
  <td><%= cantidad_productoxpedido['2021200'] %></td>
  <td><%= cantidad_productoxpedido['2200500'] %></td>
  <td><%= cantidad_productoxpedido['2200501'] %></td>
  <td><%= cantidad_productoxpedido['2200508'] %></td>
  <td><%= cantidad_productoxpedido['2200509'] %></td>
  <td><%= cantidad_productoxpedido['2201000'] %></td>
  <td><%= cantidad_productoxpedido['2203100'] %></td>
  <td><%= cantidad_productoxpedido['2203101'] %></td>
  <td><%= cantidad_productoxpedido['2203102'] %></td>
  <td><%= cantidad_productoxpedido['2203104'] %></td>
  <td><%= cantidad_productoxpedido['2203108'] %></td>
  <td><%= cantidad_productoxpedido['2203200'] %></td>
</tr>

但是当更改列的名称时,我不知道如何在不指定这些列的名称的情况下显示数据

更新

我可以决定按如下方式显示表的内容

  <%@cantidad_productosxpedido.to_a.each do |foo|%>
          <tr>
            <%foo.each do |label, value|%>
              <td><%= value %></td>
            <%end%>
          </tr>
        <%end%>

但现在我尝试添加表格的标题 像这样:

  <%@cantidad_productosxpedido.first.each do |foo|%>
      <tr>
        <%foo.each do |label, value|%>
          <th><%= label %></th>
        <%end%>
      </tr>
  <%end%>

但它在表格中显示不正确,但将其呈现如下

<tr>
     <th>title1</th> <td>value1</th>
</tr>
<tr>
      <th>title2</th> <th>value2</th>
</tr>

1 个答案:

答案 0 :(得分:0)

object.attributes.keys将返回给定记录的列名数组。您可以使用它来生成列,如下所示:

<% @cantidad_productosxpedido.each do |cantidad_productoxpedido| %>
  <% cantidad_productoxpedido.keys.each do |col| %>
      <td><%= cantidad_productoxpedido[col] %></td>
  <% end %>
<% end %>

未经测试,但应该可以使用。