我正在開發在線商店,客戶需要能夠刪除訂單並使其產品自動補貨(例如,針對測試訂單)。這是我第一次嘗試實現這個:混淆方法是不是皺起了眉頭?
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
這是更具擴展性,但讓我覺得有點髒。我感覺髒了我錯了嗎?有沒有更好的方法來做到這一點?
什麼是X?那是沒有道理的。會有多少X? 不要因爲擴展性以外的其他原因而使事物「可擴展」。 – whatsisname 2009-06-16 03:58:58
在需要時擔心可擴展性。除非有真實案例,否則很難知道要延伸什麼。 – 2009-06-16 04:04:18
X可以等於「退款」,我想(如@ order.destroy_and_refund)。 – 2009-06-16 04:13:49