How to do populate task? I'm trying something like

I’m trying to write a taks to populate my rails project with Users.

I wrote a simple script to generate and construct a yaml file, like it:

#!/usr/bin/ruby

require ‘digest/sha1’

letras = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘l’, ‘m’,
‘n’,
‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘x’, ‘z’]

def sort
return Kernel.rand(23)
end

def password
pass = sort.to_s + sort.to_s + sort.to_s
return Digest::SHA1.hexdigest(pass)
end

file = File.new(‘populate.yml’, ‘w’)

10.times do |i|
name = letras[sort].upcase + letras[sort] + letras[sort] +
letras[sort]
file.puts name + ‘:’
file.puts ’ ’ + ‘id:’ + ’ ’ + i.to_s
file.puts ’ ’ + ‘name:’ + ’ ’ + name
file.puts ’ ’ + ‘email:’ + ’ ’ + name.downcase + ‘@’ + ‘dom.com’
file.puts ’ ’ + ‘hashed_password:’ + ’ ’ + password
file.puts ’ ’ + ‘nickname:’ + ’ ’ + name
end

The ouput:

Hhpd:
id: 0
name: Hhpd
email: [email protected]
hashed_password: bdd9ab67b021794754b0bf856a9bc728c1a3e968
nickname: Hhpd
Jmzs:
id: 1
name: Jmzs
email: [email protected]
hashed_password: 70bc993e97958abc9f223c94e94742065d15efd8
nickname: Jmzs
Dpqv:
id: 2
name: Dpqv
email: [email protected]
hashed_password: e816958259e39339ddc56994e959aa56ef874f92
nickname: Dpqv

That’s ok. But now how can i get the yaml file and insert it on database
using ActiveRecord? I tried to do:

require ‘active_record’
require ‘active_record/fixtures’

namespace :db do
DATA_DIRECTORY = “#{RAILS_ROOT}/lib/tasks/populate”
namespace :populate do
desc ‘ghost users’
task :load => :environment do |t|
class_name = ‘User’
table_name = ‘Users’
fixture = Fixtures.new(ActiveRecord::Base.connection,
table_name, class_name,
File.join(DATA_DIRECTORY, table_name.to_s))
fixture.insert_fixtures
puts “that’s right”
end
end
end

What’s wrong? I’m seeing the development.log and none is INSERTED in
database.

Thank you very much to ready this question!

–
Regards,

Luiz Vitor Martinez C.
cel.: (11) 8187-8662
blog: rubz.org
engineer student at maua.br

“Posso nunca chegar a ser o melhor engenheiro do mundo, mas tenha
certeza de
que eu vou lutar com todas as minhas forças para ser o melhor engenheiro
que
eu puder ser”

letras = (“a”…“z”).to_a is a shorter way to write your code.

Put the fixtures into test/fixtures and load them with rake
db:fixtures:load

Since your default users are just for testing, put them into test/
fixtures and do rake db:fixtures:load

If you want to write the rake task just for the fuck of it, i did it
this way

namespace :db do
namespace :fixtures do
desc “load default fixtures from db/defaults/"
task :defaults => :environment do
require “active_record/fixtures”
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
puts “Fixtures”
Dir.glob(File.join(RAILS_ROOT, ‘db’, ‘defaults’, '
.{yml,
csv}')).each do |fixture_file|
Fixtures.create_fixtures(‘db/defaults’,
File.basename(fixture_file, '.'))
puts "
#{fixture_file}”
end
puts “succesfully loaded”
end
end
end

code takes everything from db/defaults ending in yml and loads it into
current environment. Its almost completely the same as original rake
db:fixtures:load task.

On Aug 17, 6:30 am, “Luiz Vitor Martinez C.” [email protected]