我正在尝试找出一种更有效的方法来添加音符计数,其中有几个简单的条件适用于查询。但这可能需要永远,因为有多达20K的记录要迭代。欢迎任何想法。
def reblog_array(notes)
data = []
notes.select('note_type, count(*) as count').where(:note_type => 'reblog', :created_at => Date.today.years_ago(1)..Date.today).group('DATE(created_at)').each do |n|
data << n.count
end
return data
end
这是从我的控制器传递给reblog_array(注释)的内容。
@tumblr = Tumblr.find(params[:id])
@notes = Note.where("tumblr_id = '#{@tumblr.id}'")
答案 0 :(得分:1)
据我所知,您正在尝试计算这个Tumblr帐户/博客每天有多少个reblogs?如果是的话,
notes.where(:note_type => 'reblog', :created_at => Date.today.years_ago(1)..Date.today).group('DATE(created_at)').count.values
应该为您提供正确的结果,而不必再次遍历结果列表。有一点需要注意,现在你的通话不会表明什么时候有0个reblog日。如果您将来电置于#values
,则会收到date => count
的哈希值。
另外,如果您不知道,我还建议您更多地使用ActiveRecord关系:
Class Tumblr
has_many :notes
end
@tumblr = Tumblr.find(params[:id])
@notes = @tumblr.notes
这样就可以避免编写Note.where("tumblr_id = '#{@tumblr.id}'")
之类的代码。最好避免字符串插值参数,支持Note.where(:tumblr_id => @tumblr.id)
或Note.where("tumblr_id = ?", @tumblr.id)
等代码,以减少编写代码的可能性vulnerable to SQL injection