如何为数据库中的关联添加uniquness检查

时间:2016-03-01 21:05:31

标签: ruby-on-rails database

我目前正在处理一个笔记项目,我需要在数据库级别检查所有者范围内的唯一性笔记名称,是否可能?我已经在我的模型中添加了验证,但在模型和数据库中同时使用它会很棒)

笔记belongs_to:用户和用户has_many:notes。我只需要验证笔记名称。

3 个答案:

答案 0 :(得分:1)

如果要验证模型中的唯一性并将其范围限定给用户,可以在Note模型中使用以下内容。

class Note < ActiveRecord::Base
  belongs_to :user

  validates :name, uniqueness: { scope: :user }
end

但是如果你想在数据库中强制执行它,你可以在迁移中使用以下内容:

add_index :notes, [:user_id, :name], :unique => true

答案 1 :(得分:0)

this SO answer改编,我认为你可以做到

ALTER TABLE dbo.notes WITH CHECK ADD
    CONSTRAINT UQ_notes_name UNIQUE (name, user_id)

CREATE UNIQUE INDEX IXU_notes_name ON dbo.notes(name, user_id)

这将确保同一个用户不能有两个具有相同名称的注释。

答案 2 :(得分:0)

您需要在数据库中为两列创建UNIQUE索引:nameuser_id(或者在数据库中调用它们的任何内容)。