Функция декремента (- =) останавливается на 0 в Ruby - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующая строка кода, которая очень просто уменьшает количество акционеров (целое число в БД), когда они продают их кому-то еще.Это работает хорошо и, как и ожидалось.

@selling_shareholder.update_attribute(:number_of_stocks, @selling_shareholder.number_of_stocks -= @transaction.number_of_stocks)

Очень просто то, что я хотел бы сделать, это остановить функцию декремента, когда number_of_stocks достигнет 0, т.е. отрицательное число не должно быть возможным.

Полагаю, я мог бы использовать простой unless @selling_shareholder.number_of_stocks > 0 в конце строки, но мне интересно, будет ли это на самом деле работать без использования цикла?

1 Ответ

0 голосов
/ 14 ноября 2018

Я бы предложил создать в вашей модели метод, называемый #decrement_stock, который бы обрабатывал эту логику. Вы можете установить все виды поведения, которые следует ожидать, например, вызывать исключения. Этот подход следует принципу " скажи, не спрашивай ". Это также простая единица работы, выполняющая одну задачу, что упрощает тестирование с помощью вашей любимой среды модульного тестирования.

Как предположили инженеры-мнки, простое добавление проверки модели также является хорошим решением, если вы хотите, чтобы контроллер обрабатывал ошибки.

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