【问题标题】:Sequelize n:m association - Voting system - cannot set attribute of join tableSequelize n:m 关联 - 投票系统 - 无法设置连接表的属性
【发布时间】:2018-09-29 22:31:34
【问题描述】:

我正在尝试实施投票系统,以便我的应用用户可以对其他用户对问题的回答进行投票。

它是一个在后端使用 Express 和 Sequelize 的 Node 应用程序,目前我使用 SQLite 数据库以便于测试。

这是我的模型的相关部分:

// in user.js
User.associate = function (models) {
  // ...
  models.User.belongsToMany(models.Response, {
    through: models.Vote,
    as: 'Votes'
  })
}

// in response.js
Response.associate = function (models) {
  // ...
  models.Response.belongsToMany(models.User, {
    through: models.Vote,
    as: 'Votes'
  })
}

// in vote.js
module.exports = (sequelize, DataTypes) => {
  return sequelize.define('Vote', {
    upVote: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    }
  })
}

所以现在在我的votes.js 控制器文件中,我可以尝试创建一个新投票,给定一个UserId 和一个ResponseId,如下所示:

const user = await User.findById(req.user.id)
const response = await Response.findById(req.params.responseId)

await response.addVote(user, {
  upVote: true
})

res.send(await response.getVotes())

问题是,虽然Votes 连接表创建正确,并且虽然我向addVote 函数传递了一个布尔值,直接指示upVote 属性应该存储什么值,但我只是收到一条错误消息,指出@ 987654329@.

我添加 not null 约束的唯一原因是因为没有它,我刚刚收到了upVote 的空值投票。

有人知道为什么会发生这种情况吗?

【问题讨论】:

    标签: javascript node.js sqlite express sequelize.js


    【解决方案1】:

    我不知道具体原因,但将 response.addVote 替换为:

    const vote = await Vote.create({
      upVote: req.body.upVote,
      UserId: req.user.id,
      ResponseId: req.params.responseId
    })
    
    res.send(vote)
    

    工作正常。奇怪的。我一直遇到一些问题,即 Sequelize 应该为关系提供的所谓“神奇”自动生成函数要么不可用,要么不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多