Я ожидаю, что он вернет ноль
find исключает id или список идентификаторов или массив идентификаторов в качестве аргументов. Поэтому, когда передаются строковые аргументы , такие как '12aaaa'
, find
принудительно заставляет их использовать to_i
, если только тип данных id
не равен string
.
So
Product.find('12aaaa') #'12aaaa'.to_i = 12
станет
Product.find(12)
Как я могу остановить это поведение?
Вы не можете, так как это поведение по умолчанию . И я не рекомендую изменять поведение по умолчанию с помощью любого вида monkey-patching .
Примечание:
find
не возвращает nil , если запись не найдена. Вместо этого возникает исключение ActiveRecord::RecordNotFound
. Тогда как find_by
возвращает nil