首页 > 解决方案 > 在活动管理员中循环

问题描述

我想将键和值对添加到结果(一行)中,所以我这样做了:

      row :skill_level do |user|
        level = {}
        user.try(:sport_memberships).each do |sport|
          sport_name  = Sport.where(id: sport.try(:sport_id)).try(:name)
          sport_level = sport.try(:level)
          level       = level.merge!("#{sport_name.to_sym}" => sport_level)
        end
      end

模型的关联是:
user.rb

has_many :sport_memberships,
           inverse_of: "user",
           class_name: "Sport::Membership"

运动.rb

has_many :memberships

会员资格.rb

belongs_to :sport, inverse_of: "memberships", counter_cache: true
belongs_to :user, inverse_of: "sport_memberships"

我预计该级别将返回如下值:{badminton: 2, golf: 2},但实际结果是:[#<Sport::Membership id: 5024, sport_id: 4, user_id: 976, level: 2, tribe_id: nil>, #<Sport::Membership id: 5025, sport_id: 14, user_id: 976, level: 2, tribe_id: nil>]. 看来我的循环没有按我的预期运行。我该如何解决我的问题?

标签: ruby-on-railsactiveadmin

解决方案


首先覆盖控制器动作

未测试

 def index 
   super
   @levels = User.joins(sport_memberships: :sport).where(id: resource.id).select("sports.name, sport_memberships.level").group("sports.name, sport_memberships.level")
 end

请尝试此查询,让我知道它是否有效。


推荐阅读