如何在解析中实现喜欢的帖子模式

时间:2015-06-13 15:26:20

标签: parse-platform

鉴于用户的标准用例能够喜欢帖子。

并使用解析示例

var user = Parse.User.current();
var relation = user.relation("likes");
relation.add(post);
user.save();

每个帖子保持总点数的最佳方法是什么?我应该:

  1. 使用beforeSave增加post对象上的total like计数器 用户寻找obj.isDirty("喜欢")然后数字的云代码钩子 以某种方式添加了哪个对象(我不确定在这种情况下发现添加了哪个帖子)

  2. 在解析中创建一个单独的like对象并对其进行计数查询 它(可能不是因为parse建议不要进行计数查询)

  3. 同时在产品客户端增加like计数器 用户正在向其用户关系添加帖子(安全问题和 同步问题?)

1 个答案:

答案 0 :(得分:2)

这是一个非常好的,深思熟虑的问题。看看你的想法:

  1. 似乎很自然地在帖子上放了一个喜欢的计数器,并且自然地保存在用户之前保存。但是你也是对的,脏信息(据我所知)并没有告诉你足够的关系,这个关系的哪个方面是新的。因此,我排除了这个好主意。

  2. 考虑一个" join table"也是合理的,我相信无论如何,解析器正在为你做多对多关系。好处是你可以使用它进行计数查询。我不知道parse建议不要进行计数查询。您必须维护此表,这将是从用户到帖子或帖子到用户的额外步骤,但我认为这是可行的。

  3. 让客户端在帖子上进行增量没有错。但是你再次说得对,这意味着你将允许客户写信不是他们自己的帖子,所以帖子' ACL必须更弱。我不会担心同步......如果我们需要按照时间对照喜欢帖子和计算喜欢的时间,我们会完全设计其他东西,可能没有parse.com。

  4. 我想我会选择(4)。哪个是想法(3)在云功能中运行。 (这实际上是beforeSave的手动形式,基本上是想法(1))。

    Parse.Cloud.define("userLikesPost", function(request, response) {
        // so we can leave posts ACL restricted to the creator
        Parse.Cloud.useMasterKey();
        var post;
        var postId = request.params.postId;
        var query = new Parse.Query("Post");
        query.get(postId).then(function(result) {
            post = result;
            post.increment("likeCount", 1);
            return post.save();
        }).then(function() {
            var user = request.user;
            user.add("likes", post);
            return user.save();
        }).then(function(result) {
            response.success(result);
        }, function(error) {
            response.error(error);
        });
    });