【发布时间】:2014-05-17 13:36:12
【问题描述】:
我正在尝试利用记忆化来加速一些数据库查询,但我遇到了用户设置的日期参数的障碍。
def self.stats_by_user_id(start_date, end_date)
@stats_by_user_id ||= BingRecord.select([:user_id, :stats])
.where(date: start_date..end_date)
.where(user_id: ["9","22"])
.group_by(&:user_id)
end
def self.get_bing_result(user_id, start_date, end_date)
a = stats_by_user_id(start_date, end_date)[user_id]
b = a.map(&:stats)
result = b.reduce({}) do |o, hash|
o.merge(hash) { |_, v1, v2| v1.merge(v2) { |_, vv1, vv2| vv1 + vv2 } }
end
end
用户将通过参数传递start_date 和end_date。我的问题是,一旦使用这些参数设置了一次@stats_by_user_id,任何后续通过新参数的日期更改都将被忽略。
我想设置一个条件来检查参数是否已更改,但我似乎不知道如何检查。有没有办法检查参数是否已更新,以便我可以将值重新分配给@stats_by_user_id?
【问题讨论】:
标签: ruby-on-rails ruby params memoization