从结果列顺序轨的ActiveRecord的find_by_sql通话

问题描述 投票:3回答:4

我试图把一些基本的报告屏幕。我已经得到了我送入的ActiveRecord的方法的find_by_sql一些相当复杂的SQL查询。我有这里的问题是,我失去了列的顺序作为原始查询给出。我假定这是因为哈希类不保留其键的挂单。

有没有解决这个问题的方法吗?我应该用那么一种不同的方法的find_by_sql我的疑问?

sql ruby-on-rails ruby activerecord
4个回答
2
投票

你在Ruby的哈希正确不维持秩序。这是该点的一部分,真的 - 你访问使用该密钥它。

我想编写查询,提供顺序列要输出他们和你通过一个循环希望输出的值?似乎是一个足够体面的想法,但我不能想办法去实现它没有至少一些额外的工作。

我建议你是来者皆明确访问您的模板列,因为你很可能会最终应用样式,使用像number_with_delimiter辅助函数的格式,那种事。

为了得到像上面提到的快捷方式,我想你可以创建符号的要求顺序的数组,并在循环中拉出来的值的散列。像这样的事情? (请原谅潜在躲闪雇员再培训局:我是haml用户!)

<% for row in @report.rows %>
    <tr>
    <% for col in [:a, :b, :c] %>
        <td><%= row[col] %></td>
    <% end %>
    </tr>
<% end %>

3
投票

我喜欢用Ruport进行报告。它具有良好的ActiveRecord的一体化,它使你能够控制列顺序和几乎任何东西。而且它足够简单易用,我不认为这是矫枉过正甚至对于“基本”的报道。


1
投票

在Rails 3.2和更高版本可以使用attribute_namesfind_by_sql结果的每个记录。这是记录在find_by_sql

执行对数据库自定义SQL查询并返回所有结果。结果将返回与请求封装为您调用此方法的模型的属性列的阵列。如果调用Product.find_by_sql然后将结果与你的SQL查询指定的属性一Product对象返回。

如果你调用一个复杂的SQL查询跨越多个表由SELECT指定的列将是模型的属性,无论它们是否是相应的表列

适用机型可以使用的栏。有关变化的详细信息请参见其他SA回答:How do you discover model attributes in Rails


0
投票

你是如何创造这些“报告屏幕”?他们是ERB模板?你只是打电话。每次在列全部打印出来?

如果是这样的话,你可以覆盖列()方法,在你的模型返回一个有序阵列。

© www.soinside.com 2019 - 2024. All rights reserved.