2

これが私のモデル階層です:

  • Page
    • has_many :media (メディアはTextMedium, ImageMedium, VideoMedium... (STI) のいずれか)
      • 各メディア has_one :attachment ( ImageAttachment, VideoAttachment... (異なるテーブル))

次のページを作成するためのフォームが必要です。

  • (必須では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

より良いものがあれば、共有してください。

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 に答える