根据第一个数组找到第二个数组的值

时间:2016-04-29 09:22:19

标签: ruby-on-rails arrays

我有模型说数据它有三个属性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%>

1 个答案:

答案 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查询,但我们可以提高效率。为此我实际上需要更多细节。

相关问题