【问题标题】:Validate nested object only if the main object requires its presence仅当主对象需要其存在时才验证嵌套对象
【发布时间】:2012-08-23 20:48:40
【问题描述】:

这是我的模型层次结构:

  • Page
    • has_many :media (媒体可以是TextMedium, ImageMedium, VideoMedium... (STI))
      • 每个媒体都有一个:附件(ImageAttachmentVideoAttachment...(不同的表))

我想要一个表单来创建一个页面:

  • ImageMedium(非必需)
  • VideoMedium(非必需)
  • 其他属性...

ImageMedium 验证其附件是否存在。 VideoMedium 也一样。

但该页面不验证 ImageMediumVideoMedium 媒体的存在。


我的表单看起来像这样(“伪代码”):

form_for page
     fields_for :image_media
         fields_for :attachement
             image_field
     fields_for :video_media
         fields_for :attachement
             video_field

问题

  • 如果我填写完整的表格,效果很好,我可以创建包含媒体和附件的页面。

  • 但是如果我不填写视频字段,例如,我仍然希望创建我的页面(因为页面不需要视频媒体)。但是不会,因为视频媒体需要附件的存在,所以它是无效的,所以页面是无效的......

问题

如何忽略视频媒体验证失败并仍然创建页面的事实?


编辑

我找到了答案:

class Page < ActiveRecord::Base
    accepts_nested_attributes_for :video_media, reject_if: ->(attributes) { attributes["attachment_attributes"]["video"].blank? }
end

如果你有更好的,请分享。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 validation nested-attributes


    【解决方案1】:

    我找到了答案:

    class Page < ActiveRecord::Base
        accepts_nested_attributes_for :video_media, reject_if: ->(attributes) { attributes["attachment_attributes"]["video"].blank? }
    end
    

    如果你有更好的,请分享。

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多