我目前正在处理一个笔记项目,我需要在数据库级别检查所有者范围内的唯一性笔记名称,是否可能?我已经在我的模型中添加了验证,但在模型和数据库中同时使用它会很棒)
笔记belongs_to:用户和用户has_many:notes。我只需要验证笔记名称。
答案 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
索引:name
和user_id
(或者在数据库中调用它们的任何内容)。