我的照片模型有一个title属性。我不希望用户添加诸如...图片,打印,照片,图像,照片,图片等文字
我已经进行了此验证,但在尝试创建/更新标题时似乎没有尝试进行验证
验证:标题,排除:{内:%w(图片,打印,照片,图片,照片,图片),
我尝试过:以及
验证:标题,排除:{in:%w(图片,打印,照片,图片,照片,图片)
任何有关为什么标题如芝加哥天际线照片'会被保存到db?
答案 0 :(得分:1)
排除将抓住"照片"但不是"的天际线照片"并且"芝加哥天际线照片" ...它只检查整个属性。
您最好通过自定义验证。
validate :reject_if_includes_image_words
def reject_if_includes_image_words
title.split(' ').each do |word|
if %w(picture print photo image photograph pic).include? word.downcase
errors.add(:title, "can't include the word '#{word}'")
break
end
end
end
修改
处理标点符号或数字的情况,并包含@ pdobb的优秀建议......
IMAGE_WORDS = %w(picture print photo image photograph pic)
validate :reject_if_includes_image_words
def reject_if_includes_image_words
used_image_words = title.gsub(/[^A-Za-z\s]/,'').split & IMAGE_WORDS
errors.add(:title, "can't use '#{used_image_words.join('\', \'')}'") if used_image_words.any?
end