Carrierwave:如何验证附加图像? (上传或remote_url)

时间:2013-10-16 18:35:29

标签: ruby-on-rails carrierwave

我正在尝试确保Picture模型的每个实例都附加了一个文件。

换句话说 - 表格中有两个字段:

:file
:remote_file_url

我希望用户至少填写其中一个。

当我验证:file的存在,并提交remote_file_url而不是file - 那么它会给出验证错误。

我现在找到的唯一方法就是这样做:

class Picture < ActiveRecord::Base
  validate :file_xor_remote_file_url

  private    
  def file_xor_remote_file_url
    if !(file.blank? ^ remote_file_url.blank?)
      errors.add(:base, "Specify a file to upload, or file URL, not both")
    end
  end

end

1 个答案:

答案 0 :(得分:4)

The wiki表示您可以像这样验证您的上传:

mount_uploader :avatar, AvatarUploader
validates_presence_of :avatar

它没有提到对远程URL的任何不同处理,但强调Carrierwave验证文件的存在而不仅仅是URL的存在。因此,给定的远程URL必须引用可以上载的有效文件。

你说“验证存在:文件”,但也许这可能就是重点。希望这会有所帮助。