ActiveRecord 객체를 어떻게 삭제합니까?
Active Record Querying을 살펴본 결과 삭제할 수있는 항목이 없습니다.
에 의해 삭제
id
,현재 개체를 같이 삭제
user.remove
,where
조항에 따라 삭제할 수 있습니까 ?
ActiveRecord 객체를 어떻게 삭제합니까?
Active Record Querying을 살펴본 결과 삭제할 수있는 항목이 없습니다.
에 의해 삭제 id
,
현재 개체를 같이 삭제 user.remove
,
where
조항에 따라 삭제할 수 있습니까 ?
답변:
그것 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
User 모델에 기본 키가 없으면 작동하지 않습니다.
참고 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
.
: 워드 프로세서는 이전의 문서 및 3.0.0 문서 레일
delete
반면 객체를 인스턴스화하지는 않습니다 destroy
. 일반적으로 delete
보다 빠릅니다 destroy
.
delete
더 빠르지 만 모델에서 정의한 콜백을 무시합니다.
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>)
공지 : 사용자는 클래스이고 사용자는 인스턴스 객체입니다
User.destroy_all()
콜백을 실행하므로 삭제하기 전에 레코드를로드합니다. 하나가 아닌 두 개의 SQL 문입니다. 성능 관련 사항 외에도 동시성에도 영향을 미칩니다. 보다 안전한 통화는 콜백을 건너 뜁니다. User.delete_all()
하나의 DELETE FROM...
명령 만 발행 합니다.