Как проверить наличие пустых значений в параметрах контроллера? (Ruby на Rails 5) - ИСПРАВЛЕНО - PullRequest
0 голосов
/ 14 января 2020

Буду признателен за любые идеи, потому что я искал документацию и этот сайт и, похоже, не могу найти ничего полезного.

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

Для того, чтобы запас товаров был правильным, я пытаюсь восстановить вычтенный запас, когда продажа была записана в прежнее состояние перед сохранением обновления (т.е. до изменения параметров, иначе запас будет вычесть дважды) Чтобы сделать это, я пытаюсь найти способ проверить, будет ли обновление 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, и оказалось, что это именно то, что мне нужно: если обновление не удается, все катится обратно. И это также здорово, потому что не требует длительных методов.

Большое спасибо всем!

...