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 

如果你有一個更好的,請分享。