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