在缔约方示例中仅允许1个RSVP

时间:2013-08-11 01:05:55

标签: meteor

流星派对示例:http://www.meteor.com/examples/parties

每个用户限制1个RSVP的最有效方法是什么?我想以某种方式修改RSVP方法,但不确定如何去做。

我的一般想法是这样的:

if(Parties.find({rsvps:{user}}) > 1 )

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你基本上有了正确的想法:在model.js中为rsvp函数添加一个检查。这是聚会集合的架构:

/*   Each party is represented by a document in the Parties collection:
    owner: user id
    x, y: Number (screen coordinates in the interval [0, 1])
    title, description: String
    public: Boolean
    invited: Array of user id's that are invited (only if !public)
    rsvps: Array of objects like {user: userId, rsvp: "yes"} (or "no"/"maybe")
*/

要检查用户是否已有rsvp,您需要在此功能中添加一行:

if (Parties.find({'rsvps.user': this.userId}).count()) return;

这基本上可行。但是,有一个小的竞争条件,一个用户可以快速连续两次调用rsvp,这个检查可以通过两个更新,然后他将被rsvp-ed两次。有办法解决这个问题(例如:某种形式的两阶段提交......)但他们更多参与其中。