3

I am unable to fetch a collection of awards with what I'm doing currently, what am I doing wrong in fetching this collection?

I keep getting the following error:

Error: Error while processing route: awards Assertion Failed: ArrayController expects model to implement the Ember.Array mixin. This can often be fixed by wrapping your model with `Ember.A()


router.coffee


...

Router.map ->
  # Contests
  @resource 'contests'
  @resource 'contest', { path: '/contests/:contest_id' }

  # Awards
  @resource 'awards', { path: '/contests/:contest_id/awards' }
  @resource 'award', { path: '/contests/:contest_id/awards/:award_id' }

  # Ads
  @resource 'ads', { path: '/contests/:contest_id/ads' }
  @resource 'ad', { path: '/contests/:contest_id/ads/:ad_id' }

...

award.coffee model


`import DS from 'ember-data'`

AwardModel = DS.Model.extend
  # Attributes
  description: DS.attr 'string'
  amount: DS.attr 'string'
  adId: DS.attr 'string'
  adType: DS.attr 'string'
  state: DS.attr 'string'
  thumbnail: "http://placehold.it/290x218"

  # Relationships
  ad: DS.belongsTo 'ad', async: true
  contest: DS.belongsTo 'contest', async: true

`export default AwardModel`

contest.coffee model


`import DS from 'ember-data'`

ContestModel = DS.Model.extend
  # Attributes
  title:          DS.attr 'string'
  truncatedTitle: DS.attr 'string'
  state:          DS.attr 'string'
  totalAwards:    DS.attr 'string'
  totalAds:       DS.attr 'string'
  startsOn:       DS.attr 'date'
  endsOn:         DS.attr 'string'
  daysLeft:       DS.attr 'string'
  thumbnail:      DS.attr 'string'
  createdAt:      DS.attr 'date'

  # Relationships
  ads:    DS.hasMany 'ad',    async: true
  awards: DS.hasMany 'award', async: true

`export default ContestModel`

awards.coffee controller


`import Ember from 'ember'`

AwardsController = Ember.ArrayController.extend
  videoAwards: '',
  printAwards: '',

  setAwards: (type) ->
    awards = @filter((award) ->
      award.get('adType') == type.capitalize()
    )
    @set(type + 'Awards', awards)

  actions:
    sortAwardsByType: ->
      @setAwards('video')
      @setAwards('print')
      # TODO: find out why this is not working
      # ['video', 'print'].forEach (type) ->
        # @setAwards(type)

`export default AwardsController`

awards.coffee routes file


`import Ember from 'ember'`
`import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'`
AwardsRoute = Ember.Route.extend AuthenticatedRouteMixin,
  model: ->
    # How to fetch the awards of the given contest here with ember data
  setupController: (controller, model) ->
    controller.set('model', model)
    controller.send('sortAwardsbyType')
`export default AwardsRoute`
1
  • 3
    Based on the error you have, you probably have prototype extensions disabled. You'll need to enable them or take the proper measures to ensure you're wrapping your arrays with an Ember.A() call. Commented Apr 22, 2015 at 15:57

1 Answer 1

2

This would work:

// awards route
model: (params) ->
  @store.find('contest', params.contest_id).then((contest) ->
     contest.get('awards')
  )

More about promises chain here.

Then you can implement filtering on the model in awards controller.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.