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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

1回答

1427閲覧

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

koume

総合スコア458

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2017/08/21 03:52

編集2017/08/21 04:28

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に失敗したのでデータが入っていない状態になってしまったと思います。

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

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

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

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

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

guest

回答1

0

自己解決

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

投稿2017/08/21 08:46

koume

総合スコア458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問