Ruby on rails 验证多列的唯一性的正确方法
假设我在一个表上有一个唯一的索引:Ruby on rails 验证多列的唯一性的正确方法,ruby-on-rails,validation,Ruby On Rails,Validation,假设我在一个表上有一个唯一的索引: add_index :events, [:venue_id, :act_id, :occurs_on], :unique => true 现在,如果我想在模型中验证这一点,我应该这样做: validates_uniqueness_of :venue_id, :scope => [:act_id, :occurs_on] 或者这个: validates_uniqueness_of :venue_id, :scope => [:act_id,
add_index :events, [:venue_id, :act_id, :occurs_on], :unique => true
现在,如果我想在模型中验证这一点,我应该这样做:
validates_uniqueness_of :venue_id, :scope => [:act_id, :occurs_on]
或者这个:
validates_uniqueness_of :venue_id, :scope => [:act_id, :occurs_on]
validates_uniqueness_of :act_id, :scope => [:venue_id, :occurs_on]
validates_uniqueness_of :occurs_on, :scope => [:venue_id, :act_id]
您的第一个唯一性约束转化为“表中的元组上只能有一个特定的地点id、动作id和发生id”。因此,只需要第一个验证语句。您的第二个语句相当于“给定一个特定的:动作id和:发生id,地点id应该是唯一的”。换句话说,它实际上没有验证:场馆id的唯一性严格,因为它允许具有相同
:场馆id
的活动,只要其他两列不相同。