RailsでSeedデータを保存しようとすると、外部キーがNOT NULL constraint failed
以下のseedデータを追加しようとすると、
NOT NULL constraint failed: member_images.member_id: INSERT INTO "member_images"
というエラー表示がされますが理由がわかりません。
なお、0.upto(9)
の部分を0.upto(8)
にすると保存できます。
つまり、member_imagesテーブルのid1~9までは外部キーが保存できるのですが、id10以上は外部キーが保存されないためNOT NULL constraint failed
となります。
このエラーで丸一日かかっており、ぜひご教授頂きたいです。
よろしくお願いいたします。
【テーブル】
members(参照元,primrykey保持)
member_images(membersテーブルを参照する)
【seedデータ】
names = %w(Taro Jiro Hana John Mike Sophy Bill Alex Mary Tom)
fnames = ["佐藤", "鈴木", "高橋", "田中"]
gnames = ["太郎", "次郎", "花子"]
affiliations = ["東京大学法学部","株式会社リクルート","カヤック"]
intros = ["プログラミングを学びたいと思っています。","JSの効率的な学習方法を教えます。"]
0.upto(9) do |idx|
member = Member.create(
name: names[idx],
full_name: "#{fnames[idx % 4]} #{gnames[idx % 3]}",
email: "#{names[idx]}@example.com",
birthday: "1981-12-01",
gender: [0, 0, 1][idx % 3],
affiliation: "#{affiliations[idx % 3]}",
intro: "#{intros[idx % 2]}",
administrator: (idx == 0),
password: "password",
password_confirmation: "password"
)
path = Rails.root.join("db/seeds/development", "member#{idx % 3 + 1}.jpg")
file = Rack::Test::UploadedFile.new(path, "image/jpeg", true)
MemberImage.create(
member: member,
uploaded_image: file
)
end
【スキーマ】
create_table "member_images", force: :cascade do |t|
t.integer "member_id", null: false
t.binary "data"
t.string "content_type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "member_images", ["member_id"], name: "index_member_images_on_member_id"
create_table "members", force: :cascade do |t|
t.string "name", null: false
t.string "full_name"
t.string "email"
t.date "birthday"
t.integer "gender", default: 0, null: false
t.text "affiliation"
t.text "intro"
t.boolean "administrator", default: false, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "hashed_password"
end