这是一个有臭味的代码,别名方法已在很多地方使用过。现在我想调用实际的rails .destory方法,从而删除书籍的所有关联依赖项 - 有没有办法可以忽略别名方法并调用.destory AR方法?
class Books < ActiveRecord::Base
def disable
self.is_active = false
save!
end
alias_method :destroy, :disable
end
答案 0 :(得分:3)
如果你有Ruby&gt; = 2.2,你可以使用Method#super_method
:
book.method(:destroy).super_method.call
在这种情况下,您将调用AR方法而不是别名。这是一个快速修复,但我建议重构您的代码。
答案 1 :(得分:1)
我猜这是尝试实施偏执狂模式。确实是臭臭的代码。它会覆盖destroy
方法,您无法再轻松调用原始实现(轻松)。但是你可以保存原来的实现!
class Book < ActiveRecord::Base
alias_method :ar_destroy, :destroy
alias_method :destroy, :disable
end
现在,您可以致电book.ar_destroy
来调用AR的destroy
实施。虽然,摆脱别名将是一个更好的解决方案。