2

这是我的模型层次结构:

  • Page
    • has_many :media (媒体可以是TextMedium, ImageMedium, VideoMedium... (STI))
      • 每个媒体 has_one :attachment ( ImageAttachment, VideoAttachment... (不同的表))

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

  • 一个ImageMedium(非必需)
  • 一个VideoMedium(不需要)
  • 其他属性...

AnImageMedium验证其附件的存在。对于一个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

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

4

1 回答 1

0

我找到了答案:

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

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

于 2012-09-02T20:07:31.810 回答