Rails - 父模型可以验证属于它们的模型的属性值吗?

Rails - Can parent models validate attribute values of the models that belong to them?

在我的应用程序中,我有以下关系:

在提交订单之前,我想确保有足够的库存来满足订单数量,但我不确定应该在哪里进行验证。

目前我有一个更新前操作,它在更新操作前检查库存水平:

def check_stock
  check_results = @order.order_items.collect do |item| 
    if (item.product.stock < item.quantity)
      flash.now[:danger] = "Sorry, it looks like we're out of some of those things"
      false
    else
      true
    end
  end

   if check_results.include?(false)
      render "show"
      return false
   else 
      @order.order_items.each do |item|
          item.remove_stock          
      end
    end
end

它完成了它的工作并阻止了更新操作,但它不是很优雅。有谁知道更好的方法?感觉应该有一种方法可以通过操纵表格来验证 order_item 的数量值……但是,是的,我不太确定该怎么做。

看看 2.2 validates_associatedhttp://guides.rubyonrails.org/active_record_validations.html

上的解释

大概的思路是这样的

您可以将 item.product.stock < item.quantity 移动到您的 order_item.rb 下的类似 validate_stock 的函数,并将其更改为 item.product.stock >= item.quantity。然后将validate :validate_stock添加到order_item.rb

然后在 order.rb

中添加 validates_associated :order_items