delete_all 很有用,但我不想看到它与表名在同一行上调用。我想在控制台和代码中禁用类似
TableName.destroy_all
的功能。
本月早些时候发生了一个有趣的问题:
在模型上调用Application.destroy_all
而不是 applications.destroy_all
(该模型有_许多应用)
对于刚接触 ROR 的人来说,看起来非常相似,但结果却是灾难性的。
我对某种形式的 lint/代码风格工具持开放态度,但这确实无法在控制台场景中捕获它。 (另外,我还没能让 rubo-cop 做这样的事情)
基本上,我要求一种使控制台和代码库更安全的方法,以便新开发人员不会无意中删除表中的所有内容。
我并不完全清楚你想要完成什么,但你可以尝试用类似的东西覆盖
ApplicationModel
中的方法(假设 Rails 5 或更高版本,或者存在根模型)。
class ApplicationModel < ActiveRecord::Base
def self.destroy_all(*args)
raise('Cannot destroy all records of a model this way. Did you mean to delete a subset of records instead?')
end
end
如果您希望该方法更难运行,可以将其设为私有...
def self.destroy_all(*args)
raise('Cannot destroy all records of a model this way. Did you mean to delete a subset of records instead?')
end
private_class_method :destroy_all
您可以想像一下,并允许使用您检查的特殊参数来绕过它,但请尝试一下,看看它是如何进行的。