Rails - 父模型可以验证属于它们的模型的属性值吗?
Rails - Can parent models validate attribute values of the models that belong to them?
在我的应用程序中,我有以下关系:
- 一个订单有多个order_items
- 一个order_item有一个产品
- 一个order_item有一个属性的数量(用户多少钱
订购?)
- 最后一个产品有 属性 库存(还剩多少?)
在提交订单之前,我想确保有足够的库存来满足订单数量,但我不确定应该在哪里进行验证。
目前我有一个更新前操作,它在更新操作前检查库存水平:
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_associated 在 http://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
在我的应用程序中,我有以下关系:
- 一个订单有多个order_items
- 一个order_item有一个产品
- 一个order_item有一个属性的数量(用户多少钱 订购?)
- 最后一个产品有 属性 库存(还剩多少?)
在提交订单之前,我想确保有足够的库存来满足订单数量,但我不确定应该在哪里进行验证。
目前我有一个更新前操作,它在更新操作前检查库存水平:
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_associated 在 http://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