Undefined method 'xxx' for {}:Hash rake db:migrate

Hi

I just installed rails 3 (3.0.3) and am trying to create a rake task.
I am seeing this:

rake aborted!
undefined method `name’ for #Hash:0x102ea4a68

my rake task (simplified) is as follows:

namespace :app do
desc ‘Create dummy data’
task :setup => :environment do
[
{ :name => ‘Test User’, :email => ‘[email protected]’ },
].each do |client|
puts ‘-----------------’
puts client.name
end
end
end

Its barfing on that puts client.name

This appears to be an older bug. The solution hinted at here

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/d3e6af81dcbcce31/fded05c2c519a31f?lnk=gst&q=rake+aborted!+undefined+method+`name’+for+%23<Hash#fded05c2c519a31f

is not working for me as rails 3 has a strong dependency on rake
0.8.7.

Anyone else seeing this problem?

On 12 January 2011 16:45, Billy [email protected] wrote:

namespace :app do
desc ‘Create dummy data’
task :setup => :environment do
[
{ :name => ‘Test User’, :email => ‘[email protected]’ },
].each do |client|
puts ‘-----------------’
puts client.name

Should that be client[:name]

Colin

On Jan 12, 4:45pm, Billy [email protected] wrote:

namespace :app do
desc ‘Create dummy data’
task :setup => :environment do
[
{ :name => ‘Test User’, :email => ‘[email protected]’ },
].each do |client|
puts ‘-----------------’
puts client.name
end
end
end

Your code just looks wrong to me - you’re iterating over an array of
hashes, so client is a hash. Hashes don’t have a name method so
client.name blows up. Did you mean client[:name] or intend to use
that data to create an active record object first?

Fred