どこまで忘れればいいですかw

user+groupごとの参加数を算出するメソッドをUserGroupモデルが持つっていうのは役割的にはOKな気がします。
あとはそれをUserモデルから呼ぶか、直接UserGroupモデルを呼ぶかですかね。
今のモデル構成だと、直接UserGroupモデルを呼ぶのがちょっと無理がある気がするので、Userモデルのメソッドを一旦呼んで、そこからUserGroupに処理を渡してから、その結果をUserモデル経由で返すっていう感じでどうでしょうか？

↓こんな感じ

gropus/show.html.erb

```erb
user.recent_entry_count(@group)
```

models/user.rb

```rb
class User < ActiveRecord::Base
  def recent_entry_count(group)
    UserGroup.find(user_id: self.id, group_id: group.id).recent_entry_count
  end
end
```

models/user_group.rb

```rb
class UserGroup < ActiveRecord::Base
  def recent_entry_count
    # キャンセルされていない終了しているイベントのidを取得
    active_event_ids = Event.where(group_id: self.group_id, canceled: false).where("ended_at < ?", Time.now).order( "started_at DESC" ).limit(config.recent_entry_count).pluck(:id)

    # ユーザのイベント参加数をカウント
    UserEvent.attendance_event_count(self.user_id, active_event_ids)
  end
end
```

models/user_event.rb

```rb
class UserEvent < ActiveRecord::Base
  def self.attendance_event_count(user_id, event_ids)
    self.where(user_id: user_id, event_id: event_ids, state: "attendance").count
  end
end
```