(Rails 4.2.1,Sqlite3)我有三个模型 - M1,M2,M3。
M1属于M2
M1还属于M3
M1具有一个:name (string)字段。
我有以下必须验证的约束条件:
1)M1记录可以关联M2或M3,但不能两者兼有。
2)无论指定M2还是M3,M1名称必须是唯一的。
我已在模型中实现了约束条件(1),并且它按预期工作。(我之所以提到它,仅因为它可能与场景相关)。
对于约束条件(2),我在迁移中添加了一个索引,如下所示:
M1属于M2
M1还属于M3
M1具有一个:name (string)字段。
我有以下必须验证的约束条件:
1)M1记录可以关联M2或M3,但不能两者兼有。
2)无论指定M2还是M3,M1名称必须是唯一的。
我已在模型中实现了约束条件(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,在m1_1和m1_2中,m3_id都为nil,不确定它是否相关。
为什么约束没有被检查?