我有一个相当简单的查询,我似乎无法做对......
我的模特:
我需要一个代表
的计数所有current_user的朋友,其提交,评论或投票创建日期为> current_user.last_refresh_date
现在,我正在通过迭代友谊并添加所有提交,评论和投票来构建数组。然后我重新迭代这个组合数组,同时比较日期以确定计数是否应该递增。不是最理想的解决方案。
修改:
@TobiasCohen
高效的解决方案。谢谢!
跟进:
我希望在本查询中再添加一个计数。我需要计算所有新评论&对current_user.submissions的投票不属于原始计数(即不是朋友)。
Psuedo-code:
current_user.submissions.join(:comments,:votes,:friends).where('last_activity>?AND friend_id!=?',current_user.last_refresh_date,current_user.id).count
我无法使查询正确(通过活动记录对复杂查询是新的)。
我打算将它作为一个单独的查询,然后将其添加到原始计数中。它可以被吸收到一个查询中而不是两个吗?
答案 0 :(得分:2)
我认为您可以通过在用户上添加缓存列来获得最佳效果,让我们称之为:last_activity_at
,然后使用提交,评论和投票上的after_create
回调更新此内容。
class Submission < ActiveRecord::Base
belongs_to :user
after_create :update_user_last_activity_at
private
def update_user_last_activity_at
user.update_attribute :last_activity_at, Time.now
end
end
然后您可以使用以下方式获取用户:
current_user.friends.where('last_activity_at > ?', current_user.last_refresh_date)