У меня есть две связанные проверки на отдельных моделях. Я могу подтвердить один путь, но не другой. Проверка почты работает: если я пытаюсь изменить количество, доступное в качестве продавца, и люди уже заказали его, оно (правильно) не позволит мне изменить количество ниже уже заказанного количества.
Проверка заказа не работает: если я пытаюсь изменить сумму заказа на больше, чем доступно, это позволяет мне. Он проверяет только текущую сумму (я думаю, до сохранения) и не замечает покупателя, пытающегося улизнуть больше, чем доступно. Когда я пытаюсь изменить заказ обратно на меньшее, чем доступно, он не дает мне проверить текущую заказанную сумму (до сохранения).
Я также пытался проверить количество заказа + оставшийся доступный запас (доступно - сумма заказа), но у меня возникла та же проблема.
Как получить проверку, чтобы проверить, какое количество будет после сохранения, а затем не сохранять его, если значение будет недействительным? Это должно работать и для редактирования заказа
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