Why did I have to set this in the setupController to work?

A couple of things are going on here:

  1. In order for the gameBingoCards property to properly receive change notifications, you need to observe model.bingoCards.[], not just model.bingoCards. This may or may not have had any impact on your application.
  2. By ‘everytime the model received an update’, I think you meant after calling .save() on the game record. If so, then the reason that the gameBingoCards computed property is called again is a side effect of how Ember Data properties work: all model attribute/relation properties are computed properties that are dependent on a pseudo data property that changes every time a record is pushed or saved. So even if the actual relations didn’t change, the bingoCards property gets notified of a change after being saved.
  3. This is the reason that the modelBingoCards property doesn’t get a notification of change: the record array value is now a property on the controller directly, which Ember Data knows nothing about.
  4. Calling model.reload() in setupController is a bit of an anti-pattern, but in the case where you always want to reload the model when hitting this route, you should use the upcoming refresh route method.
  5. It’s just a best practice to call this._super(controller, model); at the top of setupController, in which case you don’t have to manually call controller.set('model', model); because you get it for free.