Буду признателен за любые идеи, потому что я искал документацию и этот сайт и, похоже, не могу найти ничего полезного.
Я создаю приложение для управления малым бизнесом, которое будет заниматься продажами и сток. Одной из функций является обновление продажи (если пользователь хочет добавить товар, который он пропустил, или выбрал неправильный товар, и хочет исправить это, например).
Для того, чтобы запас товаров был правильным, я пытаюсь восстановить вычтенный запас, когда продажа была записана в прежнее состояние перед сохранением обновления (т.е. до изменения параметров, иначе запас будет вычесть дважды) Чтобы сделать это, я пытаюсь найти способ проверить, будет ли обновление go на случай, если форма пропустит некоторые пустые параметры (например, пустое поле «Продукт»), чтобы избежать ошибок.
Я хочу получить все параметры, транзакции и вложенные отдельные элементы и проверить, являются ли какие-либо из них пустыми / нулевыми.
Это фрагмент из контроллера, где происходит действие:
@inflow.restore_stock
respond_to do |format|
if @inflow.update(inflow_params)
@inflow.substract_stock
Фактические методы, которые делают это:
def restore_stock
self.update_stocks(false)
end
def substract_stock
self.update_stocks(true)
end
def update_stocks(substract)
self.items.each do |item|
if substract
value = -item.quantity
else
value = item.quantity
end
item.product.update_stock(value)
end
end
Для удобочитаемости и СУХОСТИ, здесь происходит логическое значение вместо контроллера.
Кроме того, методы update_stock
и update_stocks
находятся в своих соответствующих моделях, опять же для DRYness. Они принимают это значение и обновляют соответствующий атрибут.
Я пробовал .empty?
, но если таковые нет, он все равно проходит. То, что я ищу, так это то, есть ли какие-либо из них.
Другая проблема, с которой я столкнулся, состоит в том, что пустые методы ищут только ноль, а иногда он просто пустой и проходит.
Самые близкие вещи, которые я обнаружил, - это два ActionController: методы Parameters, has_value?(value)
и value?(value)
, но им нужно указать определенное значение c, и у меня нет этой информации. Мне нужно циклически просмотреть параметры и определить, являются ли какие-либо из них пустыми / нулевыми, поэтому восстановление не будет проходить go.
Есть идеи? Любая необходимая информация будет оперативно предоставлена.
Спасибо большое!
Обновление:
Проверки наличия уже есть в модели, а требования - в контроллере. Я хотел убедиться, что ни один угловой случай не может серьезно испортить стоимость акций.
После опробования предложений (.blank?
и .present?
) я наткнулся на ActiveRecord :: Transactions, и оказалось, что это именно то, что мне нужно: если обновление не удается, все катится обратно. И это также здорово, потому что не требует длительных методов.
Большое спасибо всем!