はじめに
この記事は2021年11月にまとめていた「細かいつまずいたことをメモしておく(11月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください
問題
indexを以下のように張った
staff_number.rb
def up
add_index :staff_number, :employee_code
end
def down
remove_index :staff_number, :employee_code
end
Rubocopを走らせたところ以下のエラーが発生した
Rails/UniqueValidationWithoutIndex: Uniqueness validation should be with a unique index.
エラーの内容をみるとインデックスをユニークにすると治りそうなのでユニークにしたが治らず
staff_number.rb
def up
add_index :staff, :employee_code, unique: true
end
def down
remove_index :staff, :employee_code
end
解決方法
エラーをよく見ると
validates :employee_code, presence: true, uniqueness: { scope: :staff }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scopeのところで参照しているがそこにindexが張られていないことが原因であると気づいた。
そこで、stuff_numberとstuffモデルをつなぐ、stuff_idにindexを張る
stuff_number.rb
def up
add_index :staff, [:employee_code,:staff_id] unique: true
end
def down
remove_index :staff, [:employee_code, :staff_id]
end
これでうまくいった