gpt4 book ai didi

ruby-on-rails - Rails 无法创建具有一对多关系的模型实例

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:10 25 4
gpt4 key购买 nike

我认为我的设计有很多地方可能搞砸了。不过,我对 Rails 的经验非常有限。这发生在带有 Postgres 8.3 的 Rails 2.3.2 中。

我们的数据库中有两个表。一个名为“survey”,另一个名为“survey_timepoint”。一项调查可以有多个时间点,因此在 survey_timepoint 表中有一个名为“survey_id”的列,其上有一个 fk 约束。

我还认为我应该提到这些表不是使用 Rails 迁移创建的,尽管它们确实遵循 Rails 命名约定。我怀疑 AR 没有预料到对该列的约束,它不知道如何处理这种情况。

在我的 rails 模型中我有:

has_many :survey_timepoint 

belongs_to :survey

如果我这样做:

s = Survey.new
s.survey_timepoint.push SurveyTimepoint.new
s.save!

我得到:

ActiveRecord::StatementInvalid: PGError: ERROR:  insert or update on table "survey_timepoints" violates foreign key constraint "survey_timepoints_fk"
DETAIL: Key (survey_id)=(59) is not present in table "surveys"

我假设如果我删除 survey_timepoint.survey_id 上的 fk 约束,它会正常工作。好像我不应该有太多。我是否会被困在分别创建和保存每个对象并将整个过程包装在事务中?这似乎相当不自然。对于我可能遗漏的任何必要信息,我们深表歉意。

最佳答案

您可能想要检查正在发送的 SQL 命令。它看起来像是在 survey 记录之前添加了 survey_timepoint 记录。请注意,您已经在处理两个数据库更改 — surveysurvey_timepoint — 因此您应该使用一个事务。

您可以通过在添加时间点(然后再次调用它)之前执行 s.save! 来解决眼前的问题。我对 Rails 功能的了解不够深入,不知道是否有更“railsy”的方式来执行此操作然后将其包装在事务中。

关于ruby-on-rails - Rails 无法创建具有一对多关系的模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com