gpt4 book ai didi

ruby-on-rails - ruby rails : dependent object destroyed when transfered from guest user to registered user

转载 作者:数据小太阳 更新时间:2023-10-29 09:03:09 25 4
gpt4 key购买 nike

这是我的问题:

我正在使用 Devise's guest_user ,其中包含一个 logging_in 方法,用于在注册用户登录时将 guest_user 参数传输给注册用户。所以在我的例子中,用户 has_many periods, dependent: :destroy,所以这里是 logging_in 方法:

def logging_in
guest_periods = guest_user.periods.all
guest_periods.each do |p|
p.user_id = current_user.id
p.save!
end

current_user.latest_entry = guest_user.latest_entry
current_user.is_in_zone = guest_user.is_in_zone
current_user.save
end

但是,当 guest_user 登录时,他的月经会被销毁而不是被转移。这是日志:

Started GET "/" for ::1 at 2015-05-11 00:18:03 +0300
Processing by WelcomeController#index as HTML
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 24]]
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 23]]
Period Load (0.3ms) SELECT "periods".* FROM "periods" WHERE "periods"."user_id" = $1 [["user_id", 23]]
(0.2ms) BEGIN
CACHE (0.0ms) SELECT "periods".* FROM "periods" WHERE "periods"."user_id" = $1 [["user_id", 23]]
SQL (0.8ms) UPDATE "periods" SET "user_id" = $1, "updated_at" = $2 WHERE "periods"."id" = $3 [["user_id", 24], ["updated_at", "2015-05-10 21:18:03.863162"], ["id", 170]]
(0.9ms) COMMIT
(0.2ms) BEGIN
SQL (2.1ms) UPDATE "users" SET "is_in_zone" = $1, "latest_entry" = $2, "updated_at" = $3 WHERE "users"."id" = $4 [["is_in_zone", "t"], ["latest_entry", "2015-05-04"], ["updated_at", "2015-05-10 21:18:03.875572"], ["id", 24]]
(15.8ms) COMMIT
(0.5ms) BEGIN
SQL (0.3ms) DELETE FROM "periods" WHERE "periods"."id" = $1 [["id", 170]]
SQL (0.7ms) DELETE FROM "users" WHERE "users"."id" = $1 [["id", 23]]
(1.2ms) COMMIT

所以我们可以看到转移已经完成,但是最后,句号还是被销毁了。它们不应该被销毁,因为它们不再属于要销毁的用户。

为什么会这样?

最佳答案

即使 Period#user_id 已更改,guest_user.periods 仍加载到内存中,当您销毁 guest 用户时,它也会被销毁。如果您guest_user.reload,它的关联将被清除并且销毁它变得安全。您还可以 guest_user.periods(true) 强制重新加载周期。

另一种选择是:

guest_user.periods.update_all(user_id: current_user.id)

这会执行单个查询来执行更新,如果有很多周期,这会很好,而且不会加载 guest_user.periods 关联,因此它将在期间加载新鲜销毁并找到正确的空集。

关于ruby-on-rails - ruby rails : dependent object destroyed when transfered from guest user to registered user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487033/

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