我有一个名为Rule
的类,它继承自ActiveRecord::Base
。我想覆盖继承的destroy方法来“软删除”数据库中的记录,如果我们传递一个选项来这样做的话。我想这样做:
def self.destroy(soft: false)
soft ? soft_delete : super
end
字符串
我尝试在没有选项传递给destroy
时调用super
,如果soft: true
传递给destroy
,则调用方法soft_delete
。
这可以在传递soft: true
时软删除一个规则,但是当我没有传递参数时,它会给我一个错误的参数数量错误:
/usr/local/bundle/gems/activerecord-7.0.4.3/lib/active_record/transactions.rb:293:in `destroy': wrong number of arguments (given 1, expected 0) (ArgumentError)
型
我是不是覆盖错了?
任何帮助都非常感谢。
2条答案
按热度按时间m2xkgtsf1#
当你调用
super
时,Ruby会自动包含传入的参数。所以当你不带参数调用destroy
时,super
会被称为super(soft: false)
。当然,这是错误的,B/c ActiveRecord销毁方法不接受任何参数。
这是可行的
字符串
bis0qfac2#
你可以使用这个gem:
gem "discard", "1.2.1"
你可以用discard来做软删除
字符串