所以我使用adonis为图像托管网站构建一个非常基本的后端,例如reddit或imgur。我试图让用户能够对帖子进行投票,但限制每个用户每个帖子只投票一次,我的一个控制器出现问题。
这是我的控制器类文件:
'use strict'
const Vote = use('App/Model/Vote')
const Post = use('App/Model/Post')
class VoteController {
* create (request, response) {
let currentUser = request.authUser
let postId = request.param('post_id')
let data = {}
data.user_id = currentUser.id
data.post_id = postId
let voteCheck = yield Vote.query()
.where({'post_id': postId,
'user_id': currentUser.id })
console.log(voteCheck)
if (voteCheck) {
response.status(401).json({error: "User can only cast 1 vote per post."})
} else {
let addVote = yield Vote.create(data)
yield addVote.save();
let post = yield Post.findBy('id', data.post_id)
let votes = post.vote_count;
if (votes === null ) {
votes = 1;
} else {
votes++;
}
post.vote_count = votes;
yield post.save()
response.status(202).json([post, addVote]);
}
}
}
module.exports = VoteController
我一直在玩不同的条件组合。我的主要问题是变量'voteCheck'。基本上如果用户投票,它会在我的'votes'表中创建一个新列,用于存储authUser的id和post的id。我在条件之前有一个查询,它搜索匹配该条件的预先存在的投票,如果存在,则抛出错误。如果不是(否则),它会创建一个新的投票,并在帖子'vote_count'中加1。后者工作得很好,但我相信我的条件逻辑有问题,因为即使对于尚未投票的用户,我目前也会收到错误。有什么建议?非常感谢大家阅读!
答案 0 :(得分:0)
您忘记执行查询链。将.fetch()
放在查询的末尾。
let voteCheck = yield Vote.query()
.where({'post_id': postId,
'user_id': currentUser.id })
.fetch()