Rails 4 - 在更新另一个模型期间创建关联模型

时间:2014-04-25 21:25:35

标签: ruby-on-rails ruby api ruby-on-rails-4

我正在使用Wicked gem在步骤中构建模型的实例(步骤1,步骤2等)。然而,在第三步,我需要进行API调用以收集一些数据并将其存储在另一个模型实例中(它将具有:与其他模型的belongs_to关系)。我想知道的是,当我仍处于第一个模型的创建过程中时,我如何与此API进行交互并存储信息。这是一个很好的设计模式吗?或者我应该以不同的方式处理API信息?

我的想法是,我可以重定向到表单进行API调用,并在处理API后重定向回第四步。

Rails是否具有用于处理第三方API的特定设计?

2 个答案:

答案 0 :(得分:2)

不,这不是一个好的设计模式,但有时候没有办法绕过它。重要的是

  1. 所有内容都由单个数据库事务覆盖,正如我从您的问题中所理解的那样,就是这种情况。您的对象通过“belongs_to”关系连接,因此可以一次保存它们(当保存“父”对象时,“子”将立即保存)。还没有涉及第二个未连接的对象,因此不需要为此操作创建单独的事务

  2. 第二是你用足够的错误处理来覆盖所有内容。这是你自己的责任:确保当第三方电话变成香蕉时,你已准备好抓住错误,更糟糕的是,自己回滚整个交易

  3. 所以,总结一下:不,这不是一个好习惯,但是Rails为你提供了“保持干净”的工具

答案 1 :(得分:1)

虽然您的问题相当冗长,但我建议您查看模型中的before_create ActiveRecord回调:

#app/models/parent.rb
Class Parent < ActiveRecord::Base
   before_create :build_child
end

这会在您创建父对象之前构建子对象,这意味着在保存父对象时,您将同时创建子对象。这将允许您在与父项交互时创建子对象。为确保正确填充子级数据,您需要使用带回调的实例方法