неопределенный метод find для Struct :: Group: Class - PullRequest
1 голос
/ 30 января 2011

Я получаю ошибку поиска, которую не могу понять. Это нормально работает в консоли рельсов ...

Это происходит в библиотеке, которая вызывается delayed_job. Вот полная строка:

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

Есть идеи? Спасибо.

Backtrace:

{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 ]

3 голосов
/ 29 августа 2013

Согласно FAQ в delayed_job документах ...

В Ruby / Rails есть странный крайний случай, когда Struct :: Group уже существует, поэтому вызов Group.anything из класса, который наследуется от Struct, будет иметь странные результаты. Вы можете обойти эту проблему, добавив префикс вызовов для группы с двумя двоеточиями. Например, :: Group.find будет работать как положено.

Когда эта ошибка возникла у меня, я вызывал методы класса 'Group' внутри фонового задания, которое унаследовано от Struct. Добавление имени класса к двоеточию решило эту проблему.

1 голос
/ 30 января 2011

Предоставление аргументов, таких как: all,: first и т. Д. Устарело в Rails 3. Вместо этого вы должны использовать что-то вроде этого:

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

Вот несколько ссылок на устаревшие вещи:запись-запрос-интерфейс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...