本番環境に自作のサンプルデータを反映させたい
現在、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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/15 07:55
2021/05/15 08:08 編集
2021/05/15 08:33