いやーね。
私本当にびっくらこきましたよ。
今ねrails5.2でフリマアプリ実装中なんですよ。
バリデーションみんなかけるよね?
うんわかってるよ。
みんなアタイとおんなじ気持ちだよね。
アタイわかってる。
まずね。
バリデーションはモデルとマイグレーションファイルどっちにも書いた方が良いみたいなんだけど、
今回はマイグレーションファイルの方に関してだから、モデルの方のバリデーションに関しては他の方の記事を参考にすると良いわ。
#1.最初に見て欲しいのはコレっ!
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
## Database authenticatable
t.string :first_name, null:false ,unique: true
t.string :last_name, null:false ,unique: true
}
こんな感じでね。
さーいくわよ!
#2.レッツ
rails db:migrate
そしたらさ。
create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
t.string "first_name", null: false
t.string "last_name", null: false
}
##ズゴーーーーーーーー!!
null:falseはバリデーションかかってるのに、unique:trueかかってないっての!!!
なんでよ。。。アタイこんなエラーカリキュラムで習ってないわよ。
あーもうしんどいジャパン。
そんな時はこれ!!
mysqlの方を見に行っちゃおうってわけ。
※今日はちょっとめんどくさがっちゃうから省略するわ。
要するにDBの方にもバリデーションかかってないのよ。
もうしんどいアメリカ!!!
もう調べてやるわ。。。
#3・・・・・数分後・・・・・・・
アタイこんなの見つけたわ。
それによると。。。
add_index :users, [:name], unique: true
本当かよ!!!初耳なんですけど!
え!?初耳なんですけど!!
信じてないよ?え?信じてないよ?
そんな簡単に上手くいくわけないじゃない
create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
t.string "first_name", null: false
t.string "last_name", null: false
t.index ["first_name"], name: "index_users_on_first_name", unique: true
t.index ["last_name"], name: "index_users_on_last_name", unique: true
}
##いやホンマやないかい!!!
そんなことありえるんですね。
皆さんに僕と同じ状況になる人がいるのかわかりませんが、参考になりますyouに!!!
ではまた。