【问题标题】:Rails accepts_nested_attributes_for with _destroy can skip presence validationRails 接受_nested_attributes_for 和 _destroy 可以跳过存在验证
【发布时间】:2014-02-03 17:38:18
【问题描述】:

所以我有一个典型的 Rails 模型,带有 accepts_nested_attributes_for 和存在验证

(sn-ps)

class Book < ActiveRecord::Base
  ...

  has_one :cover
  accepts_nested_attributes_for :cover, allow_destroy: true

  validate :require_cover

  def require_cover
    errors.add('', 'You must have a cover for the book.') if self.cover.blank?
  end

  ...
end

这在我创建时的第一步有效并验证正常。但是当我尝试编辑它并单击封面上的删除(单击删除添加_destroy true)并保存它时,它删除了封面但关于存在的验证已经通过。

我认为发生的事情是:

  1. 标记销毁封面
  2. 验证过程发生(认为仍有覆盖(但可能无法识别销毁))
  3. 有效,正在保存
  4. 保存书籍和
  5. 通过

没有关于无封面的再次验证

我做错了吗?还有其他方法可以实现吗?或者我如何重新验证这种情况(例如,在发生保存和销毁之后,会有另一个验证表明生成的对象现在无效)?

【问题讨论】:

    标签: ruby-on-rails validation ruby-on-rails-4 nested-forms


    【解决方案1】:

    我找到了我的问题的解决方法,我是对的,保存没有考虑那些标记为 _destroy 的内容。

    这个链接更好地描述了这个问题并且也有它的答案。 http://homeonrails.com/2012/10/validating-nested-associations-in-rails/

    基本上他拒绝了那些被标记为销毁的,并计算了剩下的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多