質問が消えたので再掲します。
現在Railsアプリを作成しています。
以下のリンクを参考にemail用のindexを設定しようとしましたが、add_index :users, "LOWER(email)", unique: true
のSQL関数あたりでMySQL側のエラーが発生してテーブルにindexを追加できません。
Ruby on Rails6 実践ガイド cp7~cp9 【メモ】 - Qiita
アドバイスいただきますようよろしくお願いいたします。
動作環境
下記をDocker環境で動作させています。
列1 | 列2 |
---|---|
OS | mac |
Ruby | 3.0.3 |
Ruby on Rails | 7.0.1 |
MySQL | 8.0.27 |
期待する動作
email用のindexが追加されてmigrationが完了すること
発生している問題・エラーメッセージ
add_index :users, "LOWER(email)", unique: true
の記述部分でエラーが発生すします。
== 20220121064419 CreateUsers: migrating ====================================== -- create_table(:users) -> 0.1258s -- add_index(:users, "LOWER(email)", {:unique=>true}) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'email))' at line 1 /medcool/db/migrate/20220121064419_create_users.rb:14:in `change' Caused by: ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'email))' at line 1 /medcool/db/migrate/20220121064419_create_users.rb:14:in `change' Caused by: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'email))' at line 1 /medcool/db/migrate/20220121064419_create_users.rb:14:in `change' Tasks: TOP => db:migrate (See full trace by running task with --trace)
参考にしたサイト
Ruby on Rails6 実践ガイド cp7~cp9 【メモ】 - Qiita
Ruby on Rails6習得編 Ruby on Rails 6 実践ガイド Chapter7 ユーザー認証(1)|俺様|note
試したこと・調べたこと
同じエラーを発生している確認しましたが見つけられませんでした。
MySQL8系ではLOWER
関数がなくなっているのかと思い調べましたが、ちゃんと存在しています。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.8 文字列関数および演算子
該当するコード
db/migrate/20220121064419_create_users.rb
ruby
1# frozen_string_literal: true 2 3class CreateUsers < ActiveRecord::Migration[7.0] 4 def change 5 create_table :users do |t| 6 t.string :nickname, null: false 7 t.string :email, null: false 8 t.string :avatar_url, null: false 9 t.string :uid, null: false 10 11 t.timestamps 12 end 13 14 add_index :users, "LOWER(email)", unique: true # Style/StringLiterals 15 end 16end 17
あなたの回答
tips
プレビュー