如何在RubyonRails中验证一对ID的唯一性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

假设在Ruby中进行以下数据库迁移:

    create_table:question_votes do | t |
      t.integer:user_id
      t.integer:question_id
      t.integer:投票

      t.timestamps
    结束

进一步假设我希望DB中的行包含唯一的(user_id,question_id)对。

validates_uniqueness_of:user_id,:question_id

似乎只是简单地将行设为用户标识唯一,并且通过问题标识唯一,而不是唯一的一对。

提问于
用户回答回答于

如果使用mysql,则可以使用唯一索引在数据库中执行此操作。是这样的:

add_index :question_votes, [:question_id, :user_id], :unique => true

当尝试保存question_id / user_id的doubled-up组合时,这会引发异常,因此必须尝试并找出要捕获和处理的异常。

用户回答回答于
validates_uniqueness_of :user_id, :scope => [:question_id]

如果需要包含另一列(或更多),则可以将其添加到范围。例:

validates_uniqueness_of :user_id, :scope => [:question_id, :some_third_column]

扫码关注云+社区