Ich habe zwei ähnliche Tabellen in Schienen namens Nachrichten und Nachrichtenhistorien. In regelmäßigen Abständen entfernen wir die alten Daten aus der Nachrichtentabelle und legen sie in message_histories ab.Wie verschmelzen mehrere und unterschiedliche ActiveRecord Query in Rails und Paginate über die Datensätze?
Jetzt möchte ich einen Bericht über die Anzahl der Nachrichten generieren, die nach app_id gruppiert sind und die in der Tabelle message und message_history vorhanden sind.
Gibt es eine Möglichkeit zur Abfrage [Nachricht & MessageHistory] Modell und Paginieren auf den Aufzeichnungen.
Derzeit verwende ich die folgende Schritt, Es sieht komisch, aber vorschlagen, einen besseren Weg, dies zu tun:
@messages = Message.select("SUM(devices_count) as count ,CAST(run_at AS DATE) AS date").where(:app_id => @app.id).where("last_run_date is not ?", nil).group("CAST(run_at AS DATE)").order("date desc")
@messages << MessageHistory.select("SUM(devices_count) as count ,CAST(run_at AS DATE) AS date").where(:app_id => @app.id).where("last_run_date is not ?", nil).group("CAST(run_at AS DATE)").order("date desc")
@messages = @messages.flatten.paginate(:page => params[:page] || 1, :per_page => 100)
Nicht bewusst, eine saubere Möglichkeit, diese Schienen Weg zu tun, aber Sie können gehen für ActiveRecord :: Base.connection.execute() 'und führen Sie die Abfrage über beide Tabellen –
können Sie etwas wie" polymorphe Assoziation "für Nachrichten Geschichte, wie es eine Form von Nachrichten ist. keine zweite Tabelle für Nachrichtenhistorien –