2016-03-28 7 views
0

現在のユーザーではなく、すべてのユーザーを検索したいと考えています。ユーザーの対は、この収集構造体の下に「部屋」アレイ内に格納されている(別のHTMLページから)各部屋のユーザーアレイからのユーザーIDのフィルタリング

構造

var newRoom = Rooms.insert({ 
    owner : Meteor.userId(), 
    receiver : receiver, 
    people : [ owner , receiver ], 
}); 

Collection.js(dburles収集ヘルパーを使用して)

Rooms.helpers({ 
    receiverName: function() { 
    return Meteor.users.findOne({ _id: this.receiver }).username; 
    } 
}); 

HTML

<!-- **allRooms.html** Works fine, names appear --> 
    {{#each rooms}} {{receiverName}}{{/each }} 

<!-- **roomDetail.html** names dont show, this.receiver undefined --> 
    {{receiverName}} 

roomDetail JSテンプレートヘルパー

self.subscribe('room', Router.current().params._id); 
self.subscribe('users'); 
}); 

にはどうすればユーザーのIDが配列であるpeopleフィールドから現在のユーザーをないthatsの返却と表示されていますか?子ページ(roomDetail)に表示したいと思います。

答えて

1

と仮定:

  • Roomsが収集され、そしてあなたがすでにオン検索するroom文書を持っています。
  • 1人のユーザーのみを取得します。

これを試してみてください:あなたの元のコードについて

// The list of userIds in room minus the current user's id. 
var userIds = _.without(room.People, Meteor.userId()); 

// Assuming we want only one user... 
var user = Meteor.users.findOne({ _id: userIds[0] }); 

いくつかの考え:

  • Roomsは、ユーザーのフィールドでない限り、あなたはあなたのMeteor.usersセレクタでRoomsへの参照を含めることはできません。 Mongoには結合の概念がありません。
  • $neはお望みではありません。 100人のユーザーが公開されていて、配列に2人のユーザーしかいない場合(そのうちの1つは望ましくない場合)、$neを使用すると99人のユーザーが返されます。あなたのコメントに基づいて

あなたはcollection helperでこれを必要とするように、それが見えます。たぶん、このような何か:

Rooms.helpers({ 
    findUser: function() { 
    var userIds = _.without(this.People, Meteor.userId()); 
    return Meteor.users.findOne({ _id: userIds[0] }); 
    }, 
}); 

そして他の場所であなたのコードでは、あなたが行うことができます与えられたroom例えば:

room.findUser() 
+0

私はそれに答えるかどうかはわかりません。クライアントのどこかでヘルパーから 'user'を返すのでしょうか? –

+0

私はサンプルのコレクションヘルパーで答えを更新しました。たぶんそれは正しい方向にあなたを導くのに役立ちます。 –

+0

私はES5と互換性があるように答えを更新しました。はい、このヘルパーは文脈として部屋を想定していますので、おそらく '{{#with room}} {{#with findUser}} ... {{/ with}} {{/ with}} 'などです。繰り返しますが、ソースを見ずに何を書くべきか正確に言うことは本当に難しいです。 –

関連する問題