Ruby on rails 添加一个';全部或无回滚';在Rails模型的前过滤器上

Ruby on rails 添加一个';全部或无回滚';在Rails模型的前过滤器上,ruby-on-rails,Ruby On Rails,我有一个这样的模型 class Status < ApplicationRecord after_save :create_feed belongs_to :user belongs_to :activity has_one :feed, as: :linkable, class_name: 'Feed', dependent: :destroy private def create_feed activity.feeds.new(linkable

我有一个这样的模型

class Status < ApplicationRecord

  after_save :create_feed

  belongs_to :user
  belongs_to :activity

  has_one :feed, as: :linkable, class_name: 'Feed', dependent: :destroy

  private

  def create_feed
    activity.feeds.new(linkable_id: id, linkable_type: class.name, category: 'status', user_id: user_id, notes: "Status Updated to #{status.titlecase} (#{.note})").save
  end

end
类状态

我省略了验证,但它们确保所有字段都是
create\u提要
成功保存所必需的。如果子提要未成功,是否有方法确保父模型提交失败?如果子项创建失败,这将是父项的回滚。

类似的情况如何

after_create :create_feed


def create_feed
  activity.feeds.create(linkable_id: id, linkable_type: class.name, category: 'status', user_id: user_id, notes: "Status Updated to #{status.titlecase} (#{.note})")

  delete unless feed.persisted?
end

我没有尝试过这一点,但也许您可以抛出一个异常:您可以创建一个流程,通过该流程将整个事件链包装在一个事务中。尽管如此,你们的关系似乎有点奇怪。既然这个类说它有一个提要,但是
create\u提要
正在通过
活动
创建一个
提要
?我不确定这是如何工作的,甚至不能更好地解释标题中所要求的“全部或全部回滚”。我可以转到另一个方向,通过提要控制器创建它,然后创建关联的状态记录。我同意这里有点奇怪,很难解释。@DanTappin yes引发异常是很重要的一部分,因为这将触发实际的回滚。除了使用交易之外,我还有太多关于帖子和你的评论的问题,我觉得提供一个答案会很有用。也就是说1)如果你觉得我的另一篇文章有帮助,请随意投票;2) 你可以根据你所学到的知识和你的设计变化来回答你自己的问题。这是可行的,但我想要的是避免先创建。我的代码可以工作,如果父代码无效,它将不会保存。我无法想象孩子创建的场景会失败,但我想再添加一个。听起来你需要一个事务。是的,现在我想知道如何做到这一点。我最初在控制器中有这个逻辑,然后用after_保存移到模型中。现在我想我需要把它放回控制器里。事务是否返回true或false?逻辑属于模型。我认为该块将计算到最后一条指令。