繁体   English   中英

关联代理中的Rails 3“未定义方法”

[英]Rails 3 “undefined method” in association proxy

我有一个模型,其中添加了一些辅助实例方法。 一个非常人为的例子:

class Post < ActiveRecord::Base
    ...

    def permalink
      "http://some_url.com/p/#{id}"
    end
end

class Notification < ActiveRecord::Base
    belongs_to :post
    ...
 end

另外,我有一个Resque队列,用于离线处理作业。 当我想通过关联(如通知)在Resque worker中调用我的“永久链接”实例方法时,就会出现问题。 假设这是我的Resque任务中运行的代码:

post = Notification.find(1234).post
do_something_with_string(post.permalink)

问题是引用post.permalink barfs:

NoMethodError: undefined method `permalink' for "#<Post:0xblahblahblah>":Post
at blahblahblah/activerecord-3.0.7/lib/active_record/associations/association_proxy.rb:216:in `method_missing' 

我已经收集到一些ActiveRecord魔术正在这里发生,当我说Notification.find(1234).post是一个代理对象(AssociationProxy)时,我会得到的回馈。 但是我已经尝试了几种方法来使它起作用,但无法做到。 我可能缺少明显的东西,但是到目前为止,对于ActiveRecord来说,这对我的模型来说似乎是一件非常愚蠢的事情。 我需要对模型执行一些魔术操作,以使诸如Ruby实例方法之类的基本操作在其上正常工作吗?

我能想到的唯一尝试就是用after_initialize填充模型中的实例变量,然后向模型中添加attr_reader以获得关联代理以了解发生了什么。 但这似乎是个大杂烩。

您提到此代码在Resque工作程序中运行。 添加permalink方法后,您需要确保并重新启动Resque worker。 重新启动你的Rails服务器不会为你做这一点-你需要手动杀/重新启动Resque过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM