2010-11-14 239 views

回答

470

这是destroydestroy_all方法,如

user.destroy 
User.find(15).destroy 
User.destroy(15) 
User.where(age: 20).destroy_all 
User.destroy_all(age: 20) 

或者您可以使用deletedelete_all,不会强制执行:before_destroy:after_destroy回调或任何相关的关联选项。

User.delete_all(condition: 'value')将允许你删除记录 没有主键

+23

如果用户模型没有主键,则user.destroy不起作用 – hammady 2013-10-24 11:06:04

+0

它应该是'User.destroy'。 – Chinmay235 2016-05-05 07:21:02

+0

它适合我!,谢谢! – 2016-05-13 06:19:27

43
  1. User.destroy

User.destroy(1)将删除用户与发生id == 1:before_destroy:after_destroy回调。例如,如果您有关联的记录

has_many :addresses, :dependent => :destroy 

用户被销毁后,他的地址也会被销毁。 如果您使用删除操作,则不会发生回调。

  • User.destroyUser.delete

  • User.destroy_all(<conditions>)User.delete_all(<conditions>)

  • 通知:用户是一类与用户是一个实例对象

    +3

    感谢您解决相关记录。 – 2012-11-14 15:26:07

    +1

    注意:'User.destroy_all()'运行回调函数,所以在它删除任何东西之前,它会加载记录。这是两个SQL语句不是一个。除了性能影响外,这也具有并发性影响。更安全的呼叫跳过回调; 'User.delete_all()'只会发出一个'DELETE FROM ...'命令。 – 2015-11-11 01:48:38

    50

    delete,delete_all,destroydestroy_all

    的文档是:older docsRails 3.0.0 docs

    delete不实例化对象,而destroy一样。通常,deletedestroy快。

    +2

    'delete'速度更快,但会绕过您可能在模型上定义的回调 – Rudi 2015-10-17 19:39:56