これが私のモデル階層です:
Page
- has_many :media (メディアは
TextMedium
,ImageMedium
,VideoMedium
... (STI) のいずれか)- 各メディア has_one :attachment (
ImageAttachment
,VideoAttachment
... (異なるテーブル))
- 各メディア has_one :attachment (
- has_many :media (メディアは
次のページを作成するためのフォームが必要です。
- (必須では
ImageMedium
ありません) - a
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
より良いものがあれば、共有してください。