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

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

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

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

Ruby on Rails 6

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

MySQL

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

Q&A

解決済

2回答

1772閲覧

本番環境にダミーデータが反映されない

taddy_korokoro

総合スコア1

Ruby

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

Ruby on Rails 6

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

MySQL

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

0グッド

0クリップ

投稿2021/05/15 07:30

編集2021/05/15 08:04

本番環境に自作のサンプルデータを反映させたい

現在、railsで自作アプリを作成しております。
初期データを作成する中でこの記事を参考に、seedファイルとは別にdummy_dataファイル(ダミーデータ)を作成しました。
開発環境には無事反映できたのですが、本番環境に反映させようとした所、エラーメッセージが表示されてしまい、解決することができておりません、、

エラーメッセージ

rails aborted! ActiveRecord::InvalidForeignKey: Mysql2::Error: Cannot add or update a child row: a foreign key constraint fails (`database_name`.`spots`, CONSTRAINT `constraint_name` FOREIGN KEY (`area_id`) REFERENCES `areas` (`id`))

該当のソースコード

db/dummy_data.rb

# spot_sample 9.times do |n| Spot.create!( name: "spot_#{n+1}", location: "location_#{n+1}", feature: "きれい", image: "img_#{n+1}", url: "hana_nav_#{n+1}.com", latitude: Faker::Address.unique.latitude, longitude: Faker::Address.unique.longitude, area_id: n+1 ) end # flower_item_sample 9.times do |n| FlowerItem.create!( name: "flower_item_#{n+1}", feature: "#{Faker::Color.unique.color_name}できれい", image: "img_#{n+1}", season_id: n+1 ) end # spotsとflower_itemsの中間テーブル 9.times do |n| FlowerItemSpot.create!( spot_id: n+1, flower_item_id: n+1 ) end

db/seecs.rb

# 見頃 12.times do |n| Season.create!( month_name: "#{n+1}月" ) end # 場所 Area.create!(name: "北海道") Area.create!(name: "東北") Area.create!(name: "関東") Area.create!(name: "中部") Area.create!(name: "関西") Area.create!(name: "四国") Area.create!(name: "中国") Area.create!(name: "九州") Area.create!(name: "沖縄")

app/models/area.rb

class Area < ApplicationRecord has_many :spots, dependent: :destroy end

app/models/spot.rb

class Spot < ApplicationRecord has_many :flower_item_spots has_many :flower_items, through: :flower_item_spots belongs_to :area, optional: true end

db/schema.rb

ActiveRecord::Schema.define(version: 2021_05_12_204529) do create_table "areas", force: :cascade do |t| t.string "name" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end create_table "flower_item_spots", force: :cascade do |t| t.integer "spot_id", null: false t.integer "flower_item_id", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end create_table "flower_items", force: :cascade do |t| t.string "name", null: false t.text "feature", null: false t.string "image" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "season_id" t.index ["season_id"], name: "index_flower_items_on_season_id" end create_table "seasons", force: :cascade do |t| t.string "month_name" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end create_table "spots", force: :cascade do |t| t.string "name", null: false t.string "location", null: false t.text "feature", null: false t.string "image" t.string "url" t.string "latitude" t.string "longitude" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "area_id" t.index ["area_id"], name: "index_spots_on_area_id" end add_foreign_key "flower_item_spots", "flower_items" add_foreign_key "flower_item_spots", "spots" add_foreign_key "flower_items", "seasons" add_foreign_key "spots", "areas" end

試したこと

エラー文をググった所、外部キー制約に違反したデータを保持した状態で当該テーブルを更新しようとすると出るとのことでした。
そのため、アソシエーション周りを再度確認してみたのですが、不整合を見つけることができず、解決に至っていない状況です。

詳しい方がおりましたら、ご教授お願いします。
###バージョン
・ruby : 2.7.2
・rails : 6.1.3
・本番環境 : heroku

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

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

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

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

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

guest

回答2

0

ベストアンサー

そのため、アソシエーション周りを再度確認してみたのですが、不整合を見つけることができず

Spot.create!area_id: n+1と機械的に増やしていっていますが、当該IDのareaは確実に存在していますか?

投稿2021/05/15 07:37

maisumakun

総合スコア146018

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

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

taddy_korokoro

2021/05/15 07:55

回答いただき、ありがとうございます。 > 当該IDのareaは確実に存在していますか? 投稿内容が不十分でした。申し訳ございません、、 初期データとして下記のseedファイルを作成しております。 `db/seecs.rb` ``` # 見頃 12.times do |n| Season.create!( month_name: "#{n+1}月" ) end # 場所 Area.create!(name: "北海道") Area.create!(name: "東北") Area.create!(name: "関東") Area.create!(name: "中部") Area.create!(name: "関西") Area.create!(name: "四国") Area.create!(name: "中国") Area.create!(name: "九州") Area.create!(name: "沖縄") ```
maisumakun

2021/05/15 08:08 編集

後から削除を行った場合など、Areaのidが1から埋まっていない可能性もありえますが、そこは問題ないですか?
taddy_korokoro

2021/05/15 08:33

コンソールにてAreaモデルを確認した所、北海道の値がid: 4となっておりました、、 ご指摘いただき、ありがとうございます。 id値を直して再度、反映させてみます!
guest

0

maisumakunさんのご指摘通り、下記の通り、seedデータとdummyデータにidの値を付与することで無事反映することができました!
ご教授いただき、ありがとうございました。

db/seeds.rb

# 見頃 12.times do |n| Season.create!( id: n+1, month_name: "#{n+1}月" ) end # 場所 Area.create!(id: 1, name: "北海道") Area.create!(id: 2, name: "東北") Area.create!(id: 3, name: "関東") Area.create!(id: 4, name: "中部") Area.create!(id: 5, name: "関西") Area.create!(id: 6, name: "四国") Area.create!(id: 7, name: "中国") Area.create!(id: 8, name: "九州") Area.create!(id: 9, name: "沖縄")

db/dummy_data.rb

# spot_sample 9.times do |n| Spot.create!( id: n+1, name: "spot_#{n+1}", location: "location_#{n+1}", feature: "きれい", image: "img_#{n+1}", url: "hana_nav_#{n+1}.com", latitude: Faker::Address.unique.latitude, longitude: Faker::Address.unique.longitude, area_id: n+1 ) end # flower_item_sample 9.times do |n| FlowerItem.create!( id: n+1, name: "flower_item_#{n+1}", feature: "#{Faker::Color.unique.color_name}できれい", image: "img_#{n+1}", season_id: n+1 ) end # spotsとflower_itemsの中間テーブル 9.times do |n| FlowerItemSpot.create!( id: n+1, spot_id: n+1, flower_item_id: n+1 ) end

投稿2021/05/15 09:20

taddy_korokoro

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問