Rails 4.1,Ruby 2.1。 Postgres 9.3.4。
只有当索引数组中的第一个参数不是nil时,是否可以在多个列上为特定表添加索引?
例如,我希望评估员能够仅针对特定学生的案例提交一次评估:
add_index :evaluations, [:case_id, :evaluator_id, :student_id], unique: true, name: 'one_eval_per_case_per_evaluator'
但是,我只希望在case_id
不为零时应用索引,否则看起来好像我在其他两列匹配时得到验证错误,这是不可取的,因为评估者应该是能够按照自己的意愿对学生进行一般评分。
(case_id
也可能是空白的,因为评估人员也可以提交“一般评估”,以及
有什么想法吗?
答案 0 :(得分:0)
我不知道SQL方法来处理数据库限制,但我最终在Rails端添加了验证。希望这可以帮助某人。基本上,我检查所述参数是否为零,如果不是,我执行唯一性验证作用于其他两个字段。它看起来像这样:
validates_uniqueness_of :evaluator_id, :scope => [:case_id, :trainee_id],
:unless => Proc.new { |evaluation| evaluation.case_id.nil? }