質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

507閲覧

rails db:migrate実行時にSQL関数部分でエラーが発生してindexを追加できない

begenner

総合スコア79

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2022/01/21 09:18

編集2022/01/21 12:18

質問が消えたので再掲します。

現在Railsアプリを作成しています。
以下のリンクを参考にemail用のindexを設定しようとしましたが、add_index :users, "LOWER(email)", unique: trueのSQL関数あたりでMySQL側のエラーが発生してテーブルにindexを追加できません。
Ruby on Rails6 実践ガイド cp7~cp9 【メモ】 - Qiita

アドバイスいただきますようよろしくお願いいたします。

動作環境

下記をDocker環境で動作させています。

列1列2
OSmac
Ruby3.0.3
Ruby on Rails7.0.1
MySQL8.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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/01/21 10:04

その関数ってあくまで現在登録されているデータに対して行うもので、 CREATE TABLE時には関係ないのでは。 どのタイミングでどのようにしたいがためにLOWER()を選択されましたか?
begenner

2022/01/21 13:26 編集

2人目以降のユーザーが登録するときに 新規で登録するデータと登録されているデータを比較して大文字、小文字の違いのみによるemailの重複が起こらないようにしたいためにLOWERを選択しました。 これだとおかしくなってしまうのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問