당신은 아주 쉽게 테스트 할 수의 before/after_destroy
콜백
Server
은
가
Server
다음에 파괴 될 것이다 '. 귀하의 코드를 가져 와서
puts
에 간단한 호출로 콜백을 구현했습니다. 그런 다음
script/console
를 시작하고 콘솔에 액티브 로그를했다 :
몇 가지 기본적인 환경 설정
>> ActiveRecord::Base.logger = Logger.new(STDOUT)
=> #<Logger:0x0000000308d2f0 ...>
:
>> server.destroy
>>> copy_some_important_stuff_from_the_server_directory_before_its_too_late called!
Client Destroy (0.5ms) DELETE FROM "clients" WHERE "id" = 1
>>> copy_some_important_stuff_from_the_server_directory_before_its_too_late called!
Client Destroy (0.2ms) DELETE FROM "clients" WHERE "id" = 2
Server Destroy (0.2ms) DELETE FROM "servers" WHERE "id" = 1
>>> delete_server_directory called!
=> #<Server id: 1, name: "The Server">
그래서 당신처럼 보인다 : 여기
>> a = Client.create :name => 'Client 1'
Client Create (0.4ms) INSERT INTO "clients" ("name", "server_id") VALUES('Client 1', NULL)
=> #<Client id: 1, name: "Client 1", server_id: nil>
>> b = Client.create :name => 'Client 2'
Client Create (0.5ms) INSERT INTO "clients" ("name", "server_id") VALUES('Client 2', NULL)
=> #<Client id: 2, name: "Client 2", server_id: nil>
>> server = Server.create :name => 'The Server'
Server Create (0.3ms) INSERT INTO "servers" ("name") VALUES('The Server')
=> #<Server id: 1, name: "The Server">
>> server.clients = [a, b]
Client Load (0.4ms) SELECT * FROM "clients" WHERE ("clients".server_id = 1)
Client Update (0.4ms) UPDATE "clients" SET "server_id" = 1 WHERE "id" = 1
Client Update (0.2ms) UPDATE "clients" SET "server_id" = 1 WHERE "id" = 2
=> [#<Client id: 1, name: "Client 1", server_id: 1>, #<Client id: 2, name: "Client 2", server_id: 1>]
를 그리고 그것의 요점이다 목표물에서 죽었다. :)
P.S.
- 서버 모델의
after_destroy
에 구문 오류가 있습니다.
- 예를 들어, 1 단계에서 실제로
before_destroy
을 의미한다고 가정합니다.
팁이 우수하고 감사합니다. 로거! – robodisco