gpt4 book ai didi

ruby-on-rails - 在某些情况下,default_scope会中断(update | delete | destroy)_all

转载 作者:行者123 更新时间:2023-12-04 03:40:59 25 4
gpt4 key购买 nike

我相信这是Rails 3中的一个错误。我希望这里的人能够引导我朝正确的方向发展。下面发布的代码仅用于说明此问题。希望这不会混淆这个问题。

给定我有一个Post模型和一个Comment模型。发表has_many条评论,评论发表到体贴。

通过在Post模型上设置default_scope,定义joins()和where()关系。在这种情况下,where()依赖于joins()。

通常,帖子不会依赖评论。同样,我只想举一个简单的例子。当where()依赖于joins()时,可能是任何情况。

class Post < ActiveRecord::Base
has_many :comments, :dependent => :destroy

default_scope joins(:comments).where("comments.id < 999")
end

class Comment < ActiveRecord::Base
belongs_to :post, :counter_cache => true
end

运行以下命令:
Post.update_all(:title => Time.now)

产生以下查询,并最终引发ActiveRecord::StatementInvalid:
UPDATE `posts` SET `title` = '2010-10-15 15:59:27'  WHERE (comments.id < 999)

同样,update_all,delete_all,destroy_all的行为相同。当我的应用程序尝试更新counter_cache时提示时,我发现了这种现象。最终深入到update_all。

最佳答案

我也遇到了这个问题,但是我们确实需要能够在update_all中使用复杂条件下的default_scope(例如,没有默认范围的话,就无法进行紧急加载,而将命名范围直接粘贴到任何地方都没有意思)。我在这里用修复程序打开了一个拉取请求:

https://github.com/rails/rails/pull/8449

对于delete_all,如果有一个连接条件使它变得更加显而易见,那么我会提出一个错误(而不是仅仅抛出连接条件并在所有内容上运行delete_all,您都会收到错误)。

不知道Rails家伙将如何处理我的请求,但认为这与本次讨论有关。 (此外,如果您需要修复此错误,则可以尝试我的分支并在拉取请求中发表评论。)

关于ruby-on-rails - 在某些情况下,default_scope会中断(update | delete | destroy)_all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3944019/

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