gpt4 book ai didi

ruby-on-rails - 关联扩展位于何处

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

我有一个关联扩展方法,如下所示:

class Bundle < ActiveRecord::Base
has_many :items do
def foo
end
end

我尝试使用延迟作业/sidekiq delay() 方法,如下所示:

b.items.delay.foo

但是我不能。你看,当延迟被调用时,关联立即评估为一个记录数组。该数组没有关联扩展方法。

所以我尝试检查 b.items.proxy_association.methods,令我惊讶的是,foo() 也不存在。

我的 foo() 方法位于哪个对象中?

最佳答案

Delayed Job 的延迟函数检查对象是否响应排队的方法,并且会返回 NoMethodError,因为该函数没有为 Items 类定义。扩展的工作方式是向 proxy_association 的所有者类添加一个模块,在这种情况下,您将能够从 Bundle::BundleItemsAssociationExtension.instance_methods 访问该函数。因此,即使您传递关联对象,延迟方法也无法访问 foo 方法。我建议将该方法移动到 Items 类,然后在其上调用延迟作业。

关于ruby-on-rails - 关联扩展位于何处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17461273/

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