【问题标题】:render all records in a stored procedure呈现存储过程中的所有记录
【发布时间】:2017-10-27 11:16:48
【问题描述】:

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

这是我的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>

【问题讨论】:

  • 您希望输出显示什么?

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


【解决方案1】:

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

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

未经测试,但应该可以。

【讨论】:

  • 嘿,谢谢,您的代码出现以下错误:ActionView :: Template :: 错误代码(# 的未定义方法“属性”):但我可以解决它,但是我正在尝试显示标题,我更新了我的帖子,最后添加了详细信息
猜你喜欢
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多