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