Search code examples
meteoriron-router

Iron Router: My Subscription Doesn't Work Inside waitOn


I have a simple subscription running in Iron Router.

@route 'AdminEditor',
  path: '/admin/editor/:id?'
  controller: 'AdminController'
  template: 'AdminRoot'
  yieldTemplates:
    'AdminEditor': { to: 'adminAside' }

  waitOn: ->
    return Meteor.subscribe 'getArticle', @params.id

The publication:

Meteor.publish 'getArticle', (id) ->
  return Articles.find { 'id': id }

My database is not empty and have a single document into it:

db.articles.find().pretty()
{
  "authors" : [
    "dqbxgrxzehXXTbFgG"
  ],
  "date" : ISODate("2014-10-01T20:07:48.846Z"),
  "title" : "Meteor #5",
  "content" : "hello",
  "id" : 1,
  "_id" : "WL7ygMw2jL9WnmRYZ"
}

But when I go to /admin/editor/1 and type in my chrome debugger Articles.findOne(), it doesn't return anything. I also have defined the collection in a lib folder:

@Articles = new Meteor.Collection 'articles'  # run on both client and server

I know there is probably a little thing I forgot, but the subscription seems to work: when I subscribe to it from the chrome debugger and do a find, it returns the object.

Meteor.subscribe('getArticle', 1);
Articles.findOne();

Solution

  • Can you log the value of @params.id in the waitOn to check what you're actually sending? It could be the fact that you're sending it as a string rather than an integer (as you are in the console). If so, you just need to parseInt and it should work.