我正在开发一个在线商店,客户需要能够删除订单并自动补货(例如,测试订单)。这是我第一次尝试实现这个:
class Order < ActiveRecord::Base
def destroy_and_restock
restock_products
destroy
end
protected
def restock_products
line_items.each do |li|
li.product.quantity_on_hand += li.quantity
li.product.save
end
end
end
但是如果我以后需要创建另一个destroy_and_x
方法怎么办?为什么不允许将 X 作为参数传递给destroy()
方法?所以现在我正在考虑这样做:
alias :old_destroy :destroy
def destroy(options = {})
if options['restock'] == true
restock_products
end
old_destroy
end
protected
def restock_products
line_items.each do |li|
li.product.quantity_on_hand += li.quantity
li.product.save
end
这更具扩展性,但让我觉得有点脏。我觉得脏是错的吗?有没有更好的方法来做到这一点?