рельсы - подтвердите, заказанный продукт имеет доступное количество - PullRequest
0 голосов
/ 17 июля 2011

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

Проверка заказа не работает: если я пытаюсь изменить сумму заказа на больше, чем доступно, это позволяет мне. Он проверяет только текущую сумму (я думаю, до сохранения) и не замечает покупателя, пытающегося улизнуть больше, чем доступно. Когда я пытаюсь изменить заказ обратно на меньшее, чем доступно, он не дает мне проверить текущую заказанную сумму (до сохранения).

Я также пытался проверить количество заказа + оставшийся доступный запас (доступно - сумма заказа), но у меня возникла та же проблема.

Как получить проверку, чтобы проверить, какое количество будет после сохранения, а затем не сохранять его, если значение будет недействительным? Это должно работать и для редактирования заказа

class Post < ActiveRecord::Base
    belongs_to :product
    belongs_to :event
    has_many :orders, :dependent => :destroy

    attr_accessible :quantity, :deadline, :product_id, :event_id

    validate :quantity_gt_ordered

    def quantity_gt_ordered
       self.errors.add(:quantity, " - People have already ordered more than this") unless self.quantity >= self.sum_orders
    end

    def sum_orders
        self.orders.sum(:quantity)
    end

class Order < ActiveRecord::Base
      belongs_to :user
      belongs_to :post

    attr_accessible :order_price, :post_id, :user_id, :quantity

    validate :quantity_is_available

    def quantity_is_available
       self.errors.add(:quantity, " - Please order only what's available") unless self.sum_post_orders <= self.post.quantity
    end

    def sum_post_orders
      Order.where(:post => self.post).sum(:quantity)
    end

1 Ответ

1 голос
/ 17 июля 2011

Вы должны просто иметь возможность сравнить с доступным количеством минус заказанное количество:

available_quantity = self.post.quantity - self.sum_post_order
if quantity > available_quantity
  self.errors.add(:quantity, " - Please order only what's available")
end

А также убедитесь, что ваш sum_post_orders не включает текущий заказ:

Order.where("id != ?", self.id).where(:post => self.post).sum(:quantity)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...