2

这里是我的模型层次:验证嵌套对象只有在主要对象需要它的存在

  • Page
    • 的has_many:媒体(媒体可以TextMediumImageMediumVideoMedium ......(STI))
      • 每个媒体HAS_ONE:附件(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 

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

回答

0

我找到了答案:

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

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