私はオンラインストアを開発しており、顧客は注文を削除して商品を自動的に補充する必要があります(テストオーダーなど)。エイリアス処理の方法はなんですか?
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
必要なときに拡張性を心配します。実際のケースがあるまでは、何を拡張するのかを知ることは難しいです。 –
Xは "払い戻し"に等しいかもしれません、(@ order.destroy_and_refundのように) –