Answers:
它destroy
和destroy_all
方法一样
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
或者,您可以使用delete
和delete_all
不会强制执行:before_destroy
和:after_destroy
回调或任何相关的关联选项。
User.delete_all(condition: 'value')
将允许您删除没有主键的记录
注意:根据@hammady的评论,user.destroy
如果用户模型没有主键,则将无法使用。
注释2:在Rails 5.1中已弃用@ pavel-chuchuva的注释,destroy_all
其中包含条件和delete_all
条件-请参阅guides.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
也很容易确定要销毁或删除的记录。
有delete
,delete_all
,destroy
,和destroy_all
。
这些文档是:旧文档和Rails 3.0.0文档
delete
不会实例化对象,而destroy
会实例化。通常,delete
速度比快destroy
。
delete
更快,但绕过了您可能在模型上定义的回调
User.destroy
User.destroy(1)
将删除用户与id == 1
和:before_destroy
和:after_destroy
出现回调。例如,如果您有关联的记录
has_many :addresses, :dependent => :destroy
用户被销毁后,其地址也将被销毁。如果改用delete操作,则不会发生回调。
User.destroy
, User.delete
User.destroy_all(<conditions>)
要么 User.delete_all(<conditions>)
注意:User是一个类,而user是一个实例对象
User.destroy_all()
运行回调,因此在删除任何内容之前,它会加载记录。这是两个SQL语句,而不是一个。除了对性能的影响外,这也对并发性有影响。安全调用会跳过回调;User.delete_all()
只会发出一个DELETE FROM...
命令。