Похоже, здесь есть несколько потенциальных проблем.
Например, ваше утверждение if
находится на отдельной строке, чем ваше заявление errors.add_to_base...
? Если это так, ваш синтаксис неправильный; оператор if
должен находиться в той же строке, что и оператор, который он изменяет. Даже если это действительно правильная строка, я бы рекомендовал не использовать трейлинг if
на такой длинной строке; это будет трудно найти условное.
if m.match(post.responses.last.to_s.strip) != 1.0
errors.add_to_base("Sorry, you must change the last submitted word by one letter")
end
Во-вторых, точное сравнение на числах с плавающей запятой почти никогда не является хорошей идеей. Поскольку числа с плавающей запятой включают в себя аппроксимации, вы иногда будете получать результаты, которые очень близки, но не совсем точно совпадают с данным числом, с которым вы сравниваете. Похоже, библиотека Amatch имеет несколько разных классов для сравнения строк; класс Sellers позволяет вам устанавливать разные веса для разных видов правок, но, учитывая описание вашей проблемы, я не думаю, что вам это нужно. Вместо этого я бы попытался использовать расстояние Левенштейна или Хемминга , в зависимости от ваших конкретных потребностей.
Наконец, если ни одно из этих предложений не работает, попробуйте записать в журнал или в ответ точные значения title.strip
и post.responses.last.to_s.strip
, чтобы убедиться, что вы действительно сравниваете значения, которые, по вашему мнению, вы сравниваете , Я не знаю остальную часть вашего кода, поэтому не могу сказать вам, верны они или нет, но если вы распечатаете их где-нибудь, вы легко сможете их проверить сами.