仅当第一个参数不为nil时,才会执行add_index

时间:2014-08-12 06:29:57

标签: sql ruby-on-rails ruby postgresql

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也可能是空白的,因为评估人员也可以提交“一般评估”,以及

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不知道SQL方法来处理数据库限制,但我最终在Rails端添加了验证。希望这可以帮助某人。基本上,我检查所述参数是否为零,如果不是,我执行唯一性验证作用于其他两个字段。它看起来像这样:

validates_uniqueness_of :evaluator_id, :scope => [:case_id, :trainee_id], :unless => Proc.new { |evaluation| evaluation.case_id.nil? }