我正在创建一个维基。每篇文章有_many Revisions,一篇文章属于_单个current_revision。因此,在数据库中,Articles 对 Revision 的 id 有一个引用,并且每个 Revisions 对它们所属的 Article 都有一个引用。在我继续之前,这似乎是一种理智的做事方式吗?我觉得这很不正统,但合乎逻辑,我不确定其他人在类似情况下是如何设置的。
问题是这种相互的belongs_to 关系在创建模型时似乎真的把Rails 扔掉了。当我第一次创建文章时,我还想创建一个初始修订以配合它。
我添加了一个 before_create 方法并做了类似的事情:
initial_revision = self.revisions.build
self.current_revision = initial_revision
但这会导致保存时堆栈溢出,因为 Rails 显然会尝试在循环中首先保存文章,所以它有一个 article_id 来粘贴 Revision,然后首先保存 Revision,所以它有一个 current_revision_id 来粘贴文章。
当我分解事物并且不同时创建它们(但仍在事务中)时,创建的第一个不会获得其参考集。例如:
initial_revision = Revisions.create
self.current_revision = initial_revision
initial_revision.article = self
会留下一个空 article_id 的修订,因为它错过了保存。
我想我也可以通过调用 after_create 方法来解决这个问题,只是用更新和保存来初始化变量,但这变成了一个巨大的混乱,我觉得在 Rails 中这通常意味着我做错了什么——当头一棒。
任何人都可以提供帮助,还是我坚持创建一个保存更改的 after_create 方法?