Ruby验证 - 单个哈希的多个排列

时间:2013-05-29 22:58:13

标签: ruby-on-rails ruby validation paperclip paperclip-validation

假设有一个哈希字段可以有两个可能的值排列,“foo”和“bar”。如何验证哈希值是两者之一?

class ValidateMe
  validates :type => { :type => "foo" or :type => "bar" }
end

这会导致错误。处理此用例的正确方法是什么?


我的实际案例是使用Paperclip附加图像。我需要强制执行图片只有.png或.jpg

class ValidateMe
  validates_attachment :image, 
                       presence => true, 
                       :content_type => { :content_type => "image/png" }
end

非常感谢任何代码块的帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是将类型数组传递给:content_type

class ValidateMe
  validates_attachment :image, 
                       presence => true, 
                       :content_type => { :content_type => ['image/png', 'image/jpeg'] }
end

(我的回答基于Paperclip - Validate File Type but not Presence

中的代码

这也可以使用正则表达式完成。 (不是更好)

class ValidateMe
  validates_attachment :image, 
                       presence => true, 
                       :content_type => { :content_type => /^image\/(jpeg|png)$/ }
end

(来源How can I restrict Paperclip to only accept images?

答案 1 :(得分:1)

我认为Btuman的第一个答案将被认为是规范的:validates_attachment中content_type的content_type键可以接受一组有效的内容类型。

答案 2 :(得分:0)

您可以使用:includes属性获取更多信息,请参阅此http://guides.rubyonrails.org/active_record_validations_callbacks.html