我有模型说数据它有三个属性1)日期2)实体3)值 我正在获取3个不同日期的数据
Date1-Any user selected date
Date2-Same date a year earlier
Date3-Same date three years earlier
我正在尝试根据第一次约会的最高值制作一张桌子 即我们正在对第一个日期的值进行排序,然后根据该值显示实体。
表格示例
**Entity** **date1 value** **date2 value** **date3 value**
在第二列中,我们将匹配第一列的实体,并为第二列数据找到该实体的值。
我的问题是我有80个实体,我必须为每个列运行一个循环。因此需要很长时间才能加载。
如果没有这么多循环,任何人都可以帮助我轻松实现这一目标。
控制器:
@field_1 = Data.where(:date=> @date.to_date).sort_by{|i| -i[:value].to_f}
@entity_1=@field_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)}
视图
<%@entity_data.each.with_index do |entity_data,index|%>
<td><%=entity_data.entity%></td>
<td><%=entity_data.value%></td>
<td><%=@field_2[index].first.value%></td>
....so on
<%end%>
答案 0 :(得分:1)
我对你为什么要获得这样的数据感到有点困惑,但更好的方法是:
@field_1 = Data.where(:date=> @date.to_date).sort_by{|i| -i[:value].to_f}
@entity_1=@field_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
希望这有助于删除2个db查询,但我们可以提高效率。为此我实际上需要更多细节。