Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 Rails-通过多个数组进行迭代_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails-通过多个数组进行迭代

Ruby on rails Rails-通过多个数组进行迭代,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在寻找一种更简单的方法来迭代一些代码。我有一个用户模型,我想在ReportRecord模型(用于报告)中统计某些用户 我有一个要记录的用户名的定义值列表(即“Jan”、“Lisa”、“Tina”)。当列表比三个值长得多时,如何使此代码更加枯燥 @users = User.all @users.each do |u| # this part repeats with different names quantity = u.where("name = ?", "Jan").count

我正在寻找一种更简单的方法来迭代一些代码。我有一个
用户
模型,我想在
ReportRecord
模型(用于报告)中统计某些
用户

我有一个要记录的
用户名的定义值列表(即“Jan”、“Lisa”、“Tina”)。当列表比三个值长得多时,如何使此代码更加枯燥

@users = User.all
@users.each do |u|

  # this part repeats with different names
  quantity = u.where("name = ?", "Jan").count
  ReportRecord.create(:user_id => u.id, :name => "Jan", :quantity => quantity)

  # repeated code with different name
  quantity = u.where("name = ?", "Lisa").count
  ReportRecord.create(:user_id => u.id, :name => "Lisa", :quantity => quantity)

  # repeated code with different name
  quantity = u.where("name = ?", "Tina").count
  ReportRecord.create(:user_id => u.id, :name => "Tina", :quantity => quantity)

end

我将首先对所有用户求和(1个查询而不是3个查询):


我将首先对所有用户求和(1个查询而不是3个查询):

names = %w(Jan List Tina)

names.each do |name|
  count = User.where(name: name).count
  ReportRecord.create(name: name, quantity: count) # I don't understand `u.id`
end
quantity_by_name = User.select(:name).where(name: %w(Jan List Tina))
                       .group(:name).sum(:quantity)
#=> { 'Lisa' => 1, 'Jan' => 2, 'Tina' => 3 }
quantity_by_name.each do |name, quantity|
  ReportRecord.create(name: name, quantity: quantity)
end