struct :: Group:Class的未定义方法`find'

时间:2011-01-30 01:23:31

标签: ruby-on-rails ruby-on-rails-3

我收到了一个我无法弄清楚的查找错误。它在rails控制台中运行良好......

这发生在delayed_job调用的库中。这是完整的一行:

@group = Group.find(:first, :conditions => ["uuid = ?", @uuid])

有什么想法吗?感谢。

回溯:

{undefined method `find' for Struct::Group:Class
/Users/xxxxx/Sites/xxxxx/lib/mailing_job.rb:79:in `perform'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/backend/base.rb:87:in `invoke_job'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:120:in `run'\n/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:120:in `run'\n/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/benchmark.rb:308:in `realtime'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:119:in `run'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:177:in `reserve_and_run_one_job'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:104:in `work_off'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:103:in `times'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:103:in `work_off'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:78:in `start'\n/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/benchmark.rb:308:in `realtime'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:77:in `start'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:74:in `loop'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/worker.rb:74:in `start'\n/Library/Ruby/Gems/1.8/bundler/gems/delayed_job-bb1e7803472b/lib/delayed/tasks.rb:9\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'\n/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'\n/Library/Ruby/Gems/1.8/gems/rake-0.8.7/bin/rake:31\n/usr/bin/rake:19:in `load'\n/usr/bin/rake:19

2 个答案:

答案 0 :(得分:3)

根据delayed_job docs中的常见问题解答......

  

Ruby / Rails存在一个奇怪的边缘情况,其中Struct :: Group已经存在,因此从继承自Struct的类中调用Group.anything会产生奇怪的结果。您可以通过使用两个冒号前缀对Group进行前缀来解决此问题。例如,:: Group.find将按预期工作。

当这个错误出现在我身上时,我在一个继承自Struct的后台作业中调用了“Group”类方法。使用冒号前面加上类名解决了这个问题。

答案 1 :(得分:1)

提供诸如:all,:first等参数在Rails 3中已弃用。您应该使用类似的东西:

Group.first(:conditions => ["uuid = ?", @uuid])

以下是一些已弃用的内容:active-record-query-interface