我将外键用于关联模型,但是名称冲突
模型:
class User < ActiveRecord::Base
belongs_to :status
end
class Poll < ActiveRecord::Base
belongs_to :status_poll
end
class Status < ActiveRecord::Base
has_many :users
end
class StatusPoll < ActiveRecord::Base
has_many :polls
end
模式:
create_table "polls", force: :cascade do |t|
t.string "title"
t.integer "status_poll_id", default: 0
end
create_table "status_polls", force: :cascade do |t|
t.string "title"
end
create_table "statuses", force: :cascade do |t|
t.string "title"
end
create_table "users", force: :cascade do |t|
t.integer "status_id", default: 0
t.string "name"
end
我通过lib / tasks / data.rake尝试popoulate民意调查:
namespace :data do
task :populate_polls => [:populate_users, :populate_status_polls] do
users = User.all.where(status_id: [1, 2])
users.each do |user|
polls_quantity = rand(7..21)
polls_quantity.times do |n|
Poll.create!(
title: Faker::Name.title + '_' + user.id.to_s + '_' + n.to_s,
user_id: user.id,
status_poll_id: rand(0..1),
description: Faker::Lorem.paragraph(7)
)
end
end
end
end
运行后填充控制台显示按照错误消息:
kalinin @ kalinin~ / rails / phs $ rake数据:populate_polls rake aborted! ActiveRecord :: RecordNotUnique:PG :: UniqueViolation:ОШИБКА: 更多信息,请访问 “statuses_pkey”详情:Ключ“(id)=(0)”ужесуществует。 : 插入 “状态”(“id”,“title”)VALUES($ 1,$ 2)返回“id”
但我没有使用状态。我使用status_poll_id
答案 0 :(得分:0)
关键是:INSERT INTO&#34;状态&#34; (&#34; id&#34;,&#34; title&#34;)VALUES($ 1,$ 2)返回&#34; id&#34;
它告诉你它试图将记录插入已存在的状态。这可能发生在其中一个子任务中,也可能是那些子任务中的子任务。
简而言之,确定将记录插入状态的位置,并找出其尝试插入重复记录的原因。