如何删除一个ActiveRecord对象?

问题描述 投票:297回答:3

如何删除一个ActiveRecord对象?

我看着Active Record Querying,它不会对删除,我可以看到任何东西。

  1. 通过id删除,
  2. 删除当前对象,如:user.remove
  3. 您可以删除根据where条款?
ruby-on-rails rails-activerecord
3个回答
547
投票

这是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')将允许你删除记录无主键

注:从@ hammady的评论,如果用户模型没有主键user.destroy将无法正常工作。

注2:从@帕维尔 - chuchuva的评论,用条件和条件destroy_all delete_all已被弃用,在Rails的5.1 - 看guides.rubyonrails.org/5_1_release_notes.html


59
投票

deletedelete_alldestroydestroy_all

该文档是:older docsRails 3.0.0 docs

delete不实例化对象,而destroy一样。在一般情况下,deletedestroy更快。


46
投票
  1. User.destroy

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

has_many :addresses, :dependent => :destroy

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

  1. User.destroyUser.delete
  2. User.destroy_all(<conditions>)User.delete_all(<conditions>)

注意:用户是一个类和用户是一个实例对象

© www.soinside.com 2019 - 2024. All rights reserved.