【发布时间】:2012-08-23 20:48:40
【问题描述】:
这是我的模型层次结构:
-
Page- has_many :media (媒体可以是
TextMedium,ImageMedium,VideoMedium... (STI))- 每个媒体都有一个:附件(
ImageAttachment,VideoAttachment...(不同的表))
- 每个媒体都有一个:附件(
- has_many :media (媒体可以是
我想要一个表单来创建一个页面:
-
ImageMedium(非必需) -
VideoMedium(非必需) - 其他属性...
ImageMedium 验证其附件是否存在。
VideoMedium 也一样。
但该页面不验证 ImageMedium 或 VideoMedium 媒体的存在。
我的表单看起来像这样(“伪代码”):
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