Избегать того, чтобы стали отвечающими совремнным требованиям данные, если не остается запас продуктов

Я работаю с двумя моделями, Компра и другим Бидоном, с формуляра Ты Покупаешь я выбираю бидоны, которые я считаю доступными в запасе, давайте говорить количество 100 Бидонов, после этого, я ввожу новое количество в компьютер с бидонами, в котором я буду нуждаться, давайте говорить 110 бидонов, что происходит, состоит в том, что, когда я преодолеваю и сохраняю количество Запас бидонов остается с номером-10 например, чего я хочу добиться, состоит, в том, чтобы попробовав сохранять новый Бидон, я сорвался сообщение или что-то, что он говорил бы мне, что я не могу использовать больше бидонов, которые существуют, и очевидно избегать того, чтобы они сохраняли с отрицательной стоимостью.

class Bidon
  has_many :compras
end

class Compra
  after_save :descontar_bidones

  belongs_to :bidon

  private

  def descontar_bidones
    self.bidon.existencias -= self.cantidad_comprada
    self.bidon.save
  end
end

С уже большое спасибо и я надеюсь, что я могу ориентироваться немного.

1
задан 04.01.2017, 07:17
0 ответов

То, в чем ты нуждаешься, он состоит в том, чтобы проверять, если твое существование больше, чем твоя покупка перед тем, как звонить в descontar_bidones, немного как следующее:

class Compra
  before_save :check_stock

  private   
  def check_stock
     unless self.bidon.existencias > self.cantidad_comprada
       errors[:attribute] << "Cantidad a comprar supera existencia"
       return false
     end
  end
end

Помни, что before_save он работает после утверждений (validates), в случае, который ты считал каким-либо.

То, что оставило бы тебе этот порядок выполнения:

  1. validates (если они есть)
  2. before_save (что проверяет, если есть существование бидонов)
  3. after_save (что делает скидку на существование бидонов)
1
ответ дан 03.12.2019, 17:53
  • 1
    Он возвращает меня: undefined method 'map' for nil:NilClass –  05.01.2017, 01:06
  • 2
    NoMethodError in Compras#create, которому он проистекает? –  06.01.2017, 00:02

Теги

Похожие вопросы