简体   繁体   中英

Meteor Users collection and Deps.autorun problems

I'm still struggling to understand how to access Meteor.users as a foreign key from another collection query. I understand that only the current user is published by default so I have a publication on the server as

Meteor.publish('itemOwner', function(userId) {
  check(userId, String);
  var user = Meteor.users.find({id: userId});
  return user;
  // return Meteor.users.find({id: userId}, {
  //   fields: {'profile': 1} });
});

I then have a Deps.autorun on the client..

Deps.autorun(function () {
  var itemOwnerId = Session.get("itemOwnerID");
  if (itemOwnerId) {
    debugger
    var ID = Session.get("itemOwnerID");
    Meteor.subscribe('itemOwner', Session.get("itemOwnerID"));
  }
});

I set the session ID on a modal form load, and display it in the template by calling the ownerProfile helper (or try to)

Template.showQuoteModalInner.helpers({
  getQuote: function () {
    // Get the quote ID from the session var
    var quote = Session.get("quoteID");
    if(quote) {
      debugger;
      var ID = quote.user._id;
      Session.set("itemOwnerID", quote.user._id);
      return quote;
    }
  },
  ownerProfile: function() {
    debugger;
    var quote = Session.get("quoteID");
    if(quote) {
      var ID = quote.user._id;
      var theUser = Meteor.users.find({_id: quote.user._id});
      return theUser; 
    };
  }
});

Now, I can trace the user ID at each stage and see it getting correctly passed to the autorun and the helpers. If I stop the program at the debugger in the ownerProfile helper and in the console put in Meteor.user.fetch({_id: "the id here"}).fetch() I get the correct user back.. but, in the handler itself the Meteor.users.find returns null??? What am I missing?

Two possibilities I noticed.

First, you are missing an underscore in the find in your publish function.

.find({id: userId}) should be .find({_id: userId}) .

But this probably isn't the issue if you are seeing the user (other than the logged in user) in the console.

Second, if you are not seeing the user from your Template.showQuoteModalInner.ownerProfile helper, it is probably because you are returning a find() instead of a findOne().

find() returns a cursor whereas findOne() returns the record. Try findOne() if you want to display that single user's attributes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM