我有一个文档Design.rb,它有一个嵌入式文档Attachment.rb,可以进行一些验证。如果Attachment.rb失败,那么Design.rb也应该失败,但它不会失败。
如果嵌入式文档失败,有关如何让设计类失败的任何建议?
Design.rb:
class Design
embeds_many :attachments, :as => :attachable
validates_associated :attachments
accepts_nested_attributes_for :attachments, :allow_destroy => true
field :description
field :title
field :tags, type: Array
field :featured, :type => Boolean, :default => false
field :full_member, :type => Boolean, :default => false
field :first_design, :type => Boolean, :default => false
field :option, :type => String
field :app_store_url, :type => String
field :design_in_progress, :type => Boolean
attr_accessible :design_in_progress, :tags, :description, :title, :featured, :project_number, :show, :option, :app_store_url, :temp_number, :option, :attachments_attributes
validates :description, :tags, :title, :presence => true
end
Attachment.rb
require 'carrierwave/mongoid'
class Attachment
embedded_in :attachable, :polymorphic => true, :inverse_of => :attachments
field :image
field :width, :type => Integer
field :height, :type => Integer
field :option, :type => String
attr_accessible :image, :width, :height, :option, :normal, :url
mount_uploader :image, ImageUploader
validate :validate_minimum_image_size
def validate_minimum_image_size
self.option = self.attachable.option
case self.option
when "iphone"
width = 640
height = 960
type = "iPhone"
when "ipad"
width = 1536
height = 2048
type = "iPad"
when "icon"
width = 1024
height = 1024
type = "Icon"
when "wp"
width = 480
height = 800
type = "Windows Phone"
when "android"
width = 480
height = 800
type = "Android"
end
geometry = self.image.geometry
unless geometry.nil?
self.width = geometry[0]
self.height = geometry[1]
end
unless (self.width == width && self.height == height)
puts "INSIDE ERROR STATEMENT"
errors.add :base, "Naughty you... "+type+" designs should be "+width.to_s+"px times "+height.to_s+"px. We want to see your awesome design in retina :-)."
end
end
end
答案 0 :(得分:2)
您可以尝试添加
embeds_many :attachments, :as => :attachable, cascade_callbacks: true
当通过设计模型进行更改时,将调用验证。