1
0

More than 3 years have passed since last update.

なんでバリデーションかかってないの!?(unique:true編)

Last updated at Posted at 2020-06-08

いやーね。
私本当にびっくらこきましたよ。
今ねrails5.2でフリマアプリ実装中なんですよ。:frowning2:
バリデーションみんなかけるよね?
うんわかってるよ。
みんなアタイとおんなじ気持ちだよね。:girl_tone2:
アタイわかってる。
まずね。
バリデーションはモデルとマイグレーションファイルどっちにも書いた方が良いみたいなんだけど、
今回はマイグレーションファイルの方に関してだから、モデルの方のバリデーションに関しては他の方の記事を参考にすると良いわ。

1.最初に見て欲しいのはコレっ!

:writing_hand_tone1:

db/migrate/create_users.rb
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.レッツ

:point_down_tone1:

コンソール
 rails db:migrate

そしたらさ。
:raised_hand:

db/migrate/schema.rb
 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
}

ズゴーーーーーーーー!!

:man_tone1:
null:falseはバリデーションかかってるのに、unique:trueかかってないっての!!!
なんでよ。。。アタイこんなエラーカリキュラムで習ってないわよ。
あーもうしんどいジャパン。

そんな時はこれ!!

mysqlの方を見に行っちゃおうってわけ。

※今日はちょっとめんどくさがっちゃうから省略するわ。

要するにDBの方にもバリデーションかかってないのよ。

もうしんどいアメリカ!!!
もう調べてやるわ。。。

3・・・・・数分後・・・・・・・

アタイこんなの見つけたわ。

Railsドキュメント

それによると。。。

 add_index :users, [:name], unique: true

本当かよ!!!初耳なんですけど!
え!?初耳なんですけど!!

信じてないよ?え?信じてないよ?
そんな簡単に上手くいくわけないじゃない

db/migrate/schema.rb
 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
}

いやホンマやないかい!!!

:clap_tone1:
そんなことありえるんですね。
皆さんに僕と同じ状況になる人がいるのかわかりませんが、参考になりますyou:frowning2:に!!!

ではまた。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0