Rails 5 клиентская проверка количества слов не работает

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

Моя проверка:

validates :skills_response, :length => {
  :minimum   => 5,
  :maximum   => 10,
  :tokenizer => lambda { |str| str.scan(/\s+|$/) },
  :too_short => "must have at least %{count} words",
  :too_long  => "must have at most %{count} words"
}

Я использую гем валидации на стороне клиента, и, как вы можете видеть, вышеприведенное не работает, так как все еще подсчитывает символы.

Я также пытался :tokenizer => lambda { |str| str.split } который тоже не работал. Почему это происходит?

2 ответа

Длина считает символы, а не слова. Если вы хотите проверить слова, вы можете добавить свой собственный валидатор в вашу модель:

validate :check_for_words

def check_for_words
      if self.skills_response.split.size > 10
         errors.add(:base, "You must have less than 10 words")
      end
end

Вы можете использовать split и count, чтобы получить количество слов, а затем создать функцию, которая будет возвращать true и false, основываясь на этом.

2.3.3 :001 > string = "Hello World today"
 => "Hello World today" 
2.3.3 :002 > split = string.split(' ')
 => ["Hello", "World", "today"] 
2.3.3 :003 > split.count
 => 3 




validate :validation

def validation
  errors.add(:for_validation, "error") if form_field.split(' ').count < 10
end
Другие вопросы по тегам