在Rails 5中,我通过活动记录关系查询并通过每个循环推送数组中的每个记录。
stats_array = []
pUser = {}
userProject = UserProject.find_by(project_id: params[:projectId], user_id: params[:userId])
if userProject && userProject.project.present?
projectUsers = userProject.project.users.where(role_id: 1..3).page(params[:page]).per(5)
projectUsers && projectUsers.each do |pu|
pUser[:full_name] = pu.full_name
pUser[:avatar_url] = pu.avatar.url(:medium)
pUser[:given] = UserTask.where(to_user: pu.id).joins(:task).count
pUser[:late] = UserTask.where(to_user: pu.id).joins(:task).where(:tasks => {end_date: Date.today.beginning_of_day..Date.today.end_of_day}).count
pUser[:wip] = UserTask.where(to_user: pu.id).joins(:task).where(:tasks => {state: @@task_wip_code}).count
puts "=============================="
puts pUser # outputs correct details
puts "=============================="
stats_array.push(pUser)
end
end
puts "=============================="
puts stats_array # output wrong details
puts "=============================="
当我打印用户对象pUser
时,在循环中。它打印正确。 为每个不同的用户。
但问题是当我打印stats_array
时,它会打印出最后一个用户的所有结果。数组长度是正确的,但结果不是。
Out-Each-Do循环
========索引0 =======
{:full_name =>"超级用户",:avatar_url =>" missing.png", :given => 14,:late => 0,:wip => 4}
========索引1 =======
{:full_name =>" Antonio Lingnan", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
======== index 2 =======
{:full_name =>" Uland Nimblehoof", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
========索引3 =======
{:full_name =>" kU",:avatar_url =>" missing.png", :given => 10,:late => 0,:wip => 2}
========索引4 =======
{:full_name =>" Saadi Orlaf", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
在每个循环之后输出stats_array
======== stats_array =======
{:full_name =>" Saadi Orlaf", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
{:full_name =>" Saadi Orlaf", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
{:full_name =>" Saadi Orlaf", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
{:full_name =>" Saadi Orlaf", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
{:full_name =>" Saadi Orlaf", :avatar_url =>" missing.png",:given => 11,:late => 0, :WIP =→2}
答案 0 :(得分:2)
尝试仅在.each
循环内声明pUser。我的猜测是因为你并没有复制你只是将对象的引用推送到数组上的对象,因此它总是会更新到最后一个对象。
stats_array = []
userProject = UserProject.find_by(project_id: params[:projectId], user_id: params[:userId])
if userProject && userProject.project.present?
projectUsers = userProject.project.users.where(role_id: 1..3).page(params[:page]).per(5)
projectUsers && projectUsers.each do |pu|
pUser = {}
pUser[:full_name] = pu.full_name
pUser[:avatar_url] = pu.avatar.url(:medium)
pUser[:given] = UserTask.where(to_user: pu.id).joins(:task).count
pUser[:late] = UserTask.where(to_user: pu.id).joins(:task).where(:tasks => {end_date: Date.today.beginning_of_day..Date.today.end_of_day}).count
pUser[:wip] = UserTask.where(to_user: pu.id).joins(:task).where(:tasks => {state: @@task_wip_code}).count
puts "=============================="
puts pUser # outputs correct details
puts "=============================="
stats_array.push(pUser)
end
end