在哪里执行验证

时间:2014-09-24 10:23:03

标签: ruby-on-rails ruby validation activerecord carrierwave

如果我有两个模型,并且正在使用accepts_nested_attributes_for我应该在哪里为子模型进行验证。

例如;如果我想验证图像大小和限制(即只允许用户上传3张图像)我应该在Animal或AnimalImage模型中进行验证

class Animal < ActiveRecord::Base
  has_many :animal_images, dependent: :destroy
  accepts_nested_attributes_for :animal_images, allow_destroy: :true
end


class AnimalImage < ActiveRecord::Base
  mount_uploader :image, AnimalImageUploader
  belongs_to :animal
end

我正在使用carrierwave上传我的图片。我注意到他们有一些内置的辅助方法但是从我看到的例子我看到的图像总是在父模型中(​​即用户有头像)

任何帮助表示赞赏

由于

1 个答案:

答案 0 :(得分:2)

如果要限制每个Animal的图像数量,则必须将此验证添加到Animal模型中。如果您想验证单个图像上的某些内容(例如文件类型,大小等),那么这些将转到AnimalImage模型。

例如:

class Animal
  validate :limit_num_of_images

  def limit_num_of_images
    errors.add(:animal_images, :less_than_or_equal_to, count: 3) if animal_images.size > 3
  end
end

这个例子非常简单,但它应该让你开始。例如,遗漏的一件事是对有效图像的任何检查。您可能只想考虑有效图像的数量。