gpt4 book ai didi

ruby-on-rails - Rails - 依赖 => destroy 遵循什么顺序?

转载 作者:行者123 更新时间:2023-12-03 16:03:06 24 4
gpt4 key购买 nike

鉴于这个例子:

class Server < ActiveRecord::Base
has_many :clients,:dependent => :destroy
after_destroy: delete_server_directory
end

class Client < ActiveRecord::Base
belongs_to :server

before_destroy :copy_some_important_stuff_from_the_server_directory_before_its_too_late
end

这会是我打电话时的破坏顺序 server.destroy吗? ?
  • Server#clients ,以及 Clientbefore/after_destroy回调
  • Server将被摧毁
  • 其次是 Serverafter_destroy回调
  • 最佳答案

    您可以非常轻松地进行测试。我接受了您的代码,并通过对 puts 的简单调用实现了回调。 .然后推出script/console并将 ActiveRecord 日志记录到控制台:

    >> ActiveRecord::Base.logger = Logger.new(STDOUT)
    => #<Logger:0x0000000308d2f0 ...>

    设置一些基本环境:
    >> 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>]

    这是它的要点:
    >> 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">

    所以看起来你已经瞄准了目标。 :)

    附言
  • 服务器模型的 after_destroy 中有一个小的语法错误.
  • 我假设在第 1 步中您的意思是 before_destroy ,如您的示例所示。
  • 关于ruby-on-rails - Rails - 依赖 => destroy 遵循什么顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191409/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com