Как остановить стандартное поведение поиска - PullRequest
0 голосов
/ 17 сентября 2018

Когда я запрашиваю

Product.find('12aaaa') 

, я ожидаю, что он вернет ноль.Но rails возвращает мне Product.find(12) как я могу остановить это поведение?

ps: Пожалуйста, не предлагайте мне преобразовать мой столбец id в строку, я, очевидно, не собираюсь этого делать, он проиндексирован иустановлен на автоинкремент.И я не думаю, что преобразование идентификатора в строку также является хорошей идеей.

Спасибо

1 Ответ

0 голосов
/ 17 сентября 2018

Я ожидаю, что он вернет ноль

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...