【发布时间】:2016-09-21 02:11:16
【问题描述】:
我被这个问题困扰了一段时间,对嵌套模型和验证如何协同工作感到非常困惑。
在下面的代码中,如果子模型(内容)的验证失败,我的目标是让父模型(图像或视频)的创建失败。目前,父模型被保存而子模型没有被保存,并且验证错误是闻所未闻的。如果没有验证错误,则一切正常。
#Image.rb
has_one :content,
as: :contentable,
inverse_of: :contentable,
dependent: :destroy
#Video.rb
has_one :content,
as: :contentable,
inverse_of: :contentable,
dependent: :destroy
#Content.rb
belongs_to :contentable,
inverse_of: :content,
polymorphic: true
validate :all_good?
def all_good?
errors.add(:base, "Nope!")
return false
end
非常感谢任何线索或见解!
【问题讨论】:
-
您使用的是哪个版本的导轨?
-
@Dinesh Rails 4.2.6
-
您到底为什么要这样设置-除非您提出最终目标,否则“推荐的方法”实际上并不可行-分离此类项目的确切原因是什么-模型/您的应用程序中的架构看起来像需要这种分离吗?
-
我认为您的代码的重要部分丢失了。你必须向我们展示你如何坚持这些对象。例如,如果您首先创建
Image并保存它,然后添加一个孩子,Rails 无法撤消此save。然后你必须把每件事都包装在一个事务中并引发一个错误来触发回滚。 -
@slowjack2k 我实际上是在保存图像或视频,并在保存之前为内容设置关联。所以它之前没有被保存。
标签: ruby-on-rails validation activerecord