从保存到数据库中排除特定单词

时间:2015-03-31 22:11:46

标签: ruby-on-rails ruby-on-rails-4

我的照片模型有一个title属性。我不希望用户添加诸如...图片,打印,照片,图像,照片,图片等文字

我已经进行了此验证,但在尝试创建/更新标题时似乎没有尝试进行验证

验证:标题,排除:{内:%w(图片,打印,照片,图片,照片,图片),

我尝试过:以及

验证:标题,排除:{in:%w(图片,打印,照片,图片,照片,图片)

任何有关为什么标题如芝加哥天际线照片'会被保存到db?

1 个答案:

答案 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