2015-03-31 2 views
0

У меня есть атрибут title для моей фотомодели. Я не хочу, чтобы пользователи добавляли такие слова, как ... картинка, Печать, фото, изображение, фотография, рис.Исключить определенные слова из базы данных

У меня есть эта проверка на месте, но она, кажется, не подбирает ее при попытке создать/обновить название

проверяющим: название, исключение: {в:% весе (фото, печать, фото, изображения, фотографии, рис),

Я попробовал его: в а

утверждает: название, исключение: {in:% w (фото, печать, фото, изображение, фотография, рис.)

Любые идеи относительно того, почему заголовок, подобный «фотографии небесного света Чикаго», будет сохранен в db?

ответ

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 

EDIT

Чтобы обработать случай пунктуации или цифр и включить @ отличное предложение 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 
+0

может сэкономить несколько тиков, чтобы использовать массив пересечения. Затем Plus может включать все недопустимые слова в сообщение об ошибке: 'invalid_words =% w (picture print photo image photograph pic) &" asdf picture and pic ".split' then' errors.add (: title, "не может включать word (s): # {invalid_words.join (',')} "), если invalid_words.any?'. Также идеально подходит для перемещения списка слов изображения в константу. – pdobb

+0

Отличное предложение @pdobb – SteveTurczyn

+0

Как я могу изменить эту функцию, чтобы не включать числа или скобки? –

Смежные вопросы