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

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

ただいまの
回答率

89.08%

Rails5.1.3で$ rails db:resetでのエラーについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 693

koume

score 162

Webアプリケーション制作の勉強中です。シードデータを投入しようとして$ rails db:resetをすると下記エラーが出てしまい
解決方法がわからなくて困っております。追加したコード、エラー内容は以下になります。

ActiveRecord::RecordNotFound in Staff::CustomersController#show
Couldn't find Customer with 'id'=51

Extracted source (around line #8):             

6   def show
7     @customer = Customer.find(params[:id])
8   end
9  
10  def new
11
Rails.root: /home/vagrant/chibi/chibi

Application Trace | Framework Trace | Full Trace
app/controllers/staff/customers_controller.rb:8:in `show'
Request

Parameters:

{"host"=>"chibi.example.com", "id"=>"51"}


コンソールに出たエラーは以下になります。

ActiveRecord::NotNullViolation: Mysql2::Error: Field 'email_for_index' doesn't h
ave a default value: INSERT INTO `customers` (`email`, `family_name`, `given_nam
e`, `family_name_kana`, `given_name_kana`, `nickname`, `gender`, `birthday`, `ha
shed_password`, `sponsor1`, `created_at`, `updated_at`) VALUES ('sato.ichiro@exa
mple.jp', '佐藤', '一郎', 'サトウ', 'イチロウ', 'イチロウ', 'male', '1988-07-26'
, '$2a$10$rHxuy0Weh64K8713Ff0rBOil9NH.xn9i8URxSp6vnxtKshA0aUB5S', 'イチロウ', '2
017-08-21 03:16:33', '2017-08-21 03:16:33')
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:36:in `block (2 leve
ls) in <top (required)>'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:32:in `times'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:32:in `block in <top     (required)>'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:31:in `times'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:31:in `<top (require    d)>'
/home/vagrant/chibi/chibi/db/seeds.rb:6:in `block in <top (required)>'
/home/vagrant/chibi/chibi/db/seeds.rb:2:in `each'
/home/vagrant/chibi/chibi/db/seeds.rb:2:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Mysql2::Error: Field 'email_for_index' doesn't have a default value
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:36:in `block (2 leve    ls) in <top (required)>'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:32:in `times'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:32:in `block in <top     (required)>'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:31:in `times'
/home/vagrant/chibi/chibi/db/seeds/development/customers.rb:31:in `<top (require    d)>'
/home/vagrant/chibi/chibi/db/seeds.rb:6:in `block in <top (required)>'
/home/vagrant/chibi/chibi/db/seeds.rb:2:in `each'
/home/vagrant/chibi/chibi/db/seeds.rb:2:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:reset => db:setup => db:seed
(See full trace by running task with --trace)


というエラーが出てしまいます。どういう内容のエラーなのかわからず自分で調べてみたのですが id51が存在しないという
エラーかな?位しかわからず対処方法もわからないのでどなたか教えていただけませんでしょうか?宜しくお願いします。
以下のシードデータを増やすスクリプトを追記する前は正常に動いていました。

city_names = %w(青巻市 赤巻市 黄巻市)

family_names = %w{
  佐藤:サトウ:sato
  鈴木:スズキ:suzuki
  高橋:タカハシ:takahashi
  田中:タナカ:tanaka
  渡辺:ワタナベ:watanabe
  伊藤:イトウ:ito
  山本:ヤマモト:yamamoto
  中村:ナカムラ:nakamura
  小林:コバヤシ:kobayashi
  加藤:カトウ:kato
}

given_names = %w{
  一郎:イチロウ:ichiro
  二郎:ジロウ:jiro
  三郎:サブロウ:saburo
  四郎:シロウ:shiro
  五郎:ゴロウ:goro
  松子:マツコ:matsuko
  竹子:タケコ:takeko
  梅子:ウメコ:umeko
  鶴子:ツルコ:tsuruko
  亀子:カメコ:kameko
}

company_names = %w(OIAX ABC XYZ)

10.times do |n|
  10.times do |m|
    fn = family_names[n].split(':')
    gn = given_names[m].split(':')

    c = Customer.create!(
      email: "#{fn[2]}.#{gn[2]}@example.jp",
      family_name: fn[0],
      given_name: gn[0],
      family_name_kana: fn[1],
      given_name_kana: gn[1],
      nickname: gn[1],
      password: 'password',
      sponsor1: gn[1], 
      birthday: 60.years.ago.advance(seconds: rand(40.years)).to_date,
      gender: m < 5 ? 'male' : 'female'
    )
    if m % 2 == 0                                    #追加
      c.personal_phones.create!(number: sprintf('090-0000-%04d', n * 10 + m))     #追加
    end                                           #追加
    c.create_home_address!(
      postal_code: sprintf('%07d', rand(10000000)),
      prefecture: Address::PREFECTURE_NAMES.sample,
      city: city_names.sample,
      address1: '開発1-2-3',
      address2: 'レイルズハイツ301号室'
    )
    if m % 10 == 0                                   #追加
      c.home_address.phones.create!(number: sprintf('03-0000-%04d', n))        #追加
    end                                         #追加
  end
end


宜しくお願いします。

追記:$ rails c でCustomer.idsでテーブルのidをみたら何も入っていない状態になっていました。

irb(main):001:0> Customer.ids
   (0.5ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
   (0.5ms)  SELECT `customers`.`id` FROM `customers`
=> []


$ rails db:resetに失敗したのでデータが入っていない状態になってしまったと思います。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

単純なミスで存在しないメソッドにバリデーションをかけていたためエラーが出ていました。
参考書の内容を少し変えながらコードの記述をしているので自分でも無意識のうちに記述してしまっていました。まだまだ未熟さを痛感いたしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.08%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る