2016-04-29 10 views
0

Ich habe sagen Modell Daten es drei Attribute hat 1) Datum 2) Entity 3) Wert ich die Daten für die 3 verschiedene Daten holeSuchen Sie den Wert des zweiten Feldes nach erster Array

Date1-Any user selected date 
Date2-Same date a year earlier 
Date3-Same date three years earlier 

Ich bin Versuchen Sie, eine Tabelle nach dem höchsten Wert für das erste Datum zu erstellen, dh wir sortieren die Werte für das erste Datum und zeigen dann die Entität entsprechend diesem Wert an.

Tabelle Beispiel

**Entity** **date1 value** **date2 value** **date3 value** 

in der zweiten Spalte werden wir die Einheit der ersten Spalte und die den Wert dieser Einheit für die zweiten Daten finden lassen.

Mein Problem ist, ich habe 80 Einheiten und ich muss eine Schleife für jede Spalte ausführen.so dauert es eine lange Zeit zu laden.

Kann mir jemand helfen, dieses Ding ohne so viele Schleifen leicht zu erreichen.

Controller:

@field_1 = Data.where(:date=> @date.to_date).sort_by{|i| -i[:value].to_f} 
@[email protected]_1.pluck('entity') 
@field_2 = @entity_1.map{|i| Data.where(:entity=>i,:date=> @date_2.to_date)} 
@field_3 = @entity_1.map{|i| Data.where(:entity=>i,:date=> @date_3.to_date)} 
@field_4 = @entity_1.map{|i| Data.where(:entity=>i,:date=> @date_4.to_date)} 

Ansicht

<%@entity_data.each.with_index do |entity_data,index|%> 
    <td><%=entity_data.entity%></td> 
    <td><%=entity_data.value%></td> 
    <td><%[email protected]_2[index].first.value%></td> 
....so on 
<%end%> 
+0

Können Sie Ihren Code posten? Was du bis jetzt gemacht hast? –

Antwort

1

ich ein wenig verwirrt bin, warum Sie wollen Daten wie diese zu bekommen, aber ein besserer Weg wäre: Hoffentlich

@field_1 = Data.where(:date=> @date.to_date).sort_by{|i| -i[:value].to_f} 
@[email protected]_1.pluck('entity') 
dates = [@date_2.to_date,@date_3.to_date,@date_4.to_date] 
data = Data.where("entity IN (?) AND date IN (?)", @entity_1, dates) 
@field_2, @field_3, @field_4 = [] 
data.map do |item| 
@field_2 << item if item.date == @date_2 
@field_3 << item if item.date == @date_3 
@field_4 << item if item.date == @date_4 
end 

Dies wird helfen, wenn 2 db Abfragen entfernt werden, aber wir können es effizienter machen. Dafür brauche ich eigentlich mehr Details, was Sie erreichen wollen.

+0

Awesome Dank MAn :) –

Verwandte Themen