Frage

Ich versuche, gemeinsam einige grundlegenden Bericht Bildschirme zu bringen. Ich habe einige ziemlich komplizierte SQL-Abfragen, die ich in der Active find_by_sql Methode bin Fütterung. Das Problem, das ich hier bin ist, dass ich die Reihenfolge der Spalten in der ursprünglichen Abfrage als gegeben verlöre. Ich gehe davon aus, dass dies, weil die Hash-Klasse nicht Eintrag Reihenfolge ihrer Schlüssel bewahren.

Gibt es eine Möglichkeit, um dieses Problem? Sollte ich eine andere Methode verwenden, dann find_by_sql für meine Fragen?

War es hilfreich?

Lösung

Sie richtig sind, dass der Ruby-Hash nicht um bewahren. Das ist ein Teil des Punktes, wirklich -. Sie Zugriff auf den Schlüssel mit

Ich nehme an, Ihre Abfrage, um die Spalten in der Reihenfolge zu liefern geschrieben, dass Sie ausgeben wollen und Sie die Werte über eine Schleife zur Ausgabe erhofften? Scheine wie eine anständige genug Idee, aber ich kann nicht einen Weg finden, ohne zumindest einige zusätzliche Arbeit zu erreichen.

Was würde ich empfehlen, ist explizit die Spalten in Ihrer Vorlage durch Schlüssel zugreifen, da Sie wahrscheinlich Arten gehen, um am Ende der Anwendung, Formatierung Hilfsfunktionen wie number_with_delimiter verwenden, diese Art der Sache.

Um so etwas wie die Verknüpfung zu erhalten oben erwähnt, nehme ich Ihnen eine Reihe von Symbolen in der Reihenfolge erforderlich und die Werte in einer Schleife aus dem Hash ziehen schaffen könnte. Etwas wie das? (Bitte auf die potenziell zwielichtige erb entschuldigen: Ich bin ein haml Benutzer)

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

Andere Tipps

Ich mag verwenden Ruport für die Berichterstattung. Es hat eine gute Active Integration und ermöglicht es Ihnen, Spaltenreihenfolge zu steuern und so ziemlich alles andere. Und es einfach genug zu bedienen, dass ich halte es nicht übertrieben, auch für „basic“ berichtet.

In Schienen 3.2 und höher können Sie attribute_names für jeden Datensatz von find_by_sql Ergebnis zu erzielen. Dies wird dokumentiert in find_by_sql :

  

Führt eine benutzerdefinierte SQL-Abfrage für die Datenbank und gibt alle   Ergebnisse. Die Ergebnisse werden als Array mit Säulen zurückgeführt werden   Verlangte als Attribute des Modells verkapselt Sie diese Methode aufrufen   von. Wenn Sie Product.find_by_sql rufen dann werden die Ergebnisse sein   in einem Product Objekt mit den Attributen zurückgegeben Sie in der angegebenen   SQL-Abfrage.

     

Wenn Sie eine komplizierte SQL-Abfrage aufrufen, die die mehrere Tabellen erstreckt sich über   Spalten durch die SELECT angegeben werden Attribute des Modells sein,   ob sie Spalten der entsprechenden Tabelle sind

Für die Modelle können Sie column_names verwenden. Für weitere Informationen zu den Änderungen finden Sie andere Antwort SA: Wie entdecken Sie Modell Attribute in Rails

Wie erstellen Sie diesen „Bericht screens“? Sind sie erb-Vorlagen? Sind Sie gerade telefonieren .each auf Spalten, um sie alle zu drucken?

Wenn das der Fall, dass Sie die Spalten außer Kraft setzen könnten () -Methode in Ihren Modellen ein geordnetes Array zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top