Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 优化RubyonRails(计数)_Ruby On Rails_Ruby_Performance_Counter - Fatal编程技术网

Ruby on rails 优化RubyonRails(计数)

Ruby on rails 优化RubyonRails(计数),ruby-on-rails,ruby,performance,counter,Ruby On Rails,Ruby,Performance,Counter,如何优化此代码?( (许多信息) 谢谢你试试这个 def messages_count total = users.inject(0) {|result,user| result + user.messages.size} end 在您的情况下,最终您将计算所有消息。因此您可以使用 Message.count 因为我假设有一个与相关的模式用户有很多:消息消息模式。 users=User.created\u在(3天之前)之后创建 可以在单行查询中使用 Message.where("user

如何优化此代码?(

(许多信息)

谢谢你试试这个

def messages_count
  total = users.inject(0) {|result,user| result + user.messages.size}
end
在您的情况下,最终您将计算所有消息。因此您可以使用

Message.count

因为我假设有一个与
相关的模式
用户
有很多:消息
消息
模式。
users=User.created\u在(3天之前)之后创建
可以在单行查询中使用

Message.where("user_id IN (?)",users.pluck(:id)).count


您也可以将其编写为:

def messages_count
  users.sum { |u| u.messages.size }
end

使用。问题是不明确的。最简单的答案是
Message.all.count
yes@GregDan是正确的哈,
Message.all.count
是错误的,因为
users
有消息,
admin
有消息,但是thx@ArupRakshit@BorisBresciani:counter_缓存和
消息。count
是两个截然不同的东西。counter_缓存是这里最好的解决方案。如何对其进行更优化(注入)?此外,您的假设(“您正在计算所有消息”)没有任何依据。在注入的情况下,我们只对数组进行一次迭代,而没有在迭代器中进行任何硬计算。“我们只对一个数组进行一次迭代,而没有在迭代器中进行任何困难的计算”-原始代码也是如此。@SergioTulentsev它在代码更少的意义上更“优化”:)您假设
users
代表所有用户。这不一定是真的。据我们所知,它可以是
users=User.created\u之后(3天之前)
或其他什么当然,是的用户将包含您希望从db获得的用户,并且可以触发查询,不用担心……在这种情况下,
消息。all.count
是一个错误的解决方案。可以只是
消息。count
,顺便说一句。是的,您是对的,但我提到了
消息的任何情况。where(user:users).count
应为等效值。
Message.where(user: users).count
def messages_count
  users.sum { |u| u.messages.size }
end