【发布时间】:2016-04-14 17:10:03
【问题描述】:
(Rails 4.2.1,Sqlite3)我有三个模型 - M1、M2、M3。
M1 属于 M2
M1也属于M3
M1 有一个 :name (字符串)字段。
我有以下必须验证的约束:
1) M1 记录可以关联 M2 或 M3,但不能同时关联。
2) M1 名称在指定的 M2 或 M3 中必须是唯一的。
我已经在模型中实现了约束 (1),它按预期工作。 (我提到它只是因为它可能与场景相关)。
对于约束(2),我在迁移中添加了一个索引,如下:
add_index :m1s, [:name, :m2_id, :m3_id], unique: true, name: "idx_m1_name"
然后我打电话:
> m2 = M2.create! # success
> m1_1 = M1.create!(name: 'm1_1', m2: m2) #success
> m1_2 = M1.create!(name: 'm1_1', m2: m2) # this line should fail, but doesn't
m1_1 和 m1_2 被创建 - 我希望 m1_2 由于唯一性约束而失败。
我检查了索引是否按预期添加。另外,根据约束 1,m3_id 在 m1_1 和 m1_2 中都是 nil,不确定是否相关。
为什么不检查约束?
【问题讨论】:
标签: ruby-on-rails unique-constraint database-indexes