Calling to_yaml on an array of ActiveRecord objects is producing TypeError: wrong argument type nil

I have a query I am running from the console that is eager loading the
address on the people model:

people = People.find(:all,
:include => [:address],
:limit => 50)

Trying to output that to yaml via:

people.to_yaml

Produces the following exception:

TypeError: wrong argument type nil (expected Data)
from /usr/local/lib/ruby/1.8/yaml.rb:387:in emit' from /usr/local/lib/ruby/1.8/yaml.rb:387:inquick_emit’
from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:107:in `to_yaml’
from (irb):10

I don’t see any nil data in the include… thoughts?

Thanks,

Scott

I also run into the same error when running Spec tests that trigger
Observers, which trigger DelayedJobs.

The full stack trace:

ruby-1.8.7-p249/lib/ruby/1.8/yaml.rb:391:in emit' ruby-1.8.7-p249/lib/ruby/1.8/yaml.rb:391:inquick_emit’
ruby-1.8.7-p249/lib/ruby/1.8/yaml/rubytypes.rb:15:in to_yaml' vendor/bundler_gems/gems/delayed_job-2.0.3/lib/delayed/backend/base.rb:61:inpayload_object=’
vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2746:in
send' vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2746:inattributes=’
vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2742:in
each' vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2742:inattributes=’
vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2438:in
initialize' vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:721:innew’
vendor/bundler_gems/gems/activerecord-2.3.5/lib/active_record/base.rb:721:in
create' vendor/bundler_gems/gems/delayed_job-2.0.3/lib/delayed/backend/base.rb:21:inenqueue’
app/models/mail_opt_in_observer.rb:12:in after_save' app/models/mail_opt_in_observer.rb:11:ineach’
app/models/mail_opt_in_observer.rb:11:in after_save' vendor/plugins/state_machine/lib/state_machine/integrations/active_record/observer.rb:32:insend’
vendor/plugins/state_machine/lib/state_machine/integrations/active_record/observer.rb:32:in
`update’

I’ve been trying to find the root of this for a few days now and its
getting a little frustrating. I’ve tried to re-open the class and do the
following (because I noticed the error doesn’t occur when I clone the
object and then call to_yaml).

module ActiveRecord
class Base

to_old_yaml = self.instance_method(:to_yaml)

define_method(:to_yaml) do
  clone = self.clone
 clone.id = self.id
  oh_boy = to_old_yaml.bind(clone).call
 #debugger
 #testtest = 'test'
  return oh_boy
end

end
end

…but this yields a similar error:

wrong argument type String (expected Data)

Scott wrote:
I have a query I am running from the console that is eager loading the
address on the people model:

people = People.find(:all,
:include => [:address],
:limit => 50)

Trying to output that to yaml via:

people.to_yaml

Produces the following exception:

TypeError: wrong argument type nil (expected Data)
from /usr/local/lib/ruby/1.8/yaml.rb:387:in emit' from /usr/local/lib/ruby/1.8/yaml.rb:387:inquick_emit’
from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:107:in `to_yaml’
from (irb):10

I don’t see any nil data in the include… thoughts?

Thanks,

Scott