如何删除ActiveRecord对象?
我查看了Active Record Querying,它没有任何关于我可以看到的删除内容。
按id
删除,
删除当前对象,如:user.remove
,
您可以根据where
条款删除吗?
答案 0 :(得分:531)
这是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 :来自@ pavel-chuchuva的评论,条件destroy_all
和条件delete_all
已在Rails 5.1中弃用 - 请参阅guides.rubyonrails.org/5_1_release_notes .html
答案 1 :(得分:58)
有delete
,delete_all
,destroy
和destroy_all
。
文档为:older docs和Rails 3.0.0 docs
delete
不会实例化对象,而destroy
会对象进行实例化。通常,delete
比destroy
快。
答案 2 :(得分:45)
User.destroy
User.destroy(1)
将删除id == 1
的用户,并发生:before_destroy
和:after_destroy
次回调。例如,如果您有相关记录
has_many :addresses, :dependent => :destroy
用户被销毁后,他的地址也将被销毁。 如果您使用删除操作,则不会发生回调。
User.destroy
,User.delete
User.destroy_all(<conditions>)
或User.delete_all(<conditions>)
注意:用户是一个类,用户是一个实例对象
答案 3 :(得分:0)
如果您使用的是Rails 5及更高版本,则以下解决方案将起作用。
#delete based on id
user_id = 50
User.find(id: user_id).delete_all
#delete based on condition
threshold_age = 20
User.where(age: threshold_age).delete_all
https://www.rubydoc.info/docs/rails/ActiveRecord%2FNullRelation:delete_all
答案 4 :(得分:0)
从特定表中删除行或从表中删除记录集非常简单,您只需从控制台获取记录集的 ID,然后删除或销毁它。