File into database migration

0 views
Skip to first unread message

Keith Davey

unread,
Feb 14, 2007, 9:10:40 AM2/14/07
to rubyonra...@googlegroups.com
Hi,

I am trying to figure out an approach to load in our initial data into our database.

I have written some load_data migrations which populate a lot of the stuff, how some of the database
items are images etc and I am trying to figure out how to approach added them to the database
during a rake db:migrate

I am thinking if I store the files in a folder off the RAILS_ROOT I should be able to run code in the migration
script to add them to the database. Does this sound like a valid approach?

Thanks,

Keith

Rob Biedenharn

unread,
Feb 14, 2007, 10:34:14 AM2/14/07
to rubyonra...@googlegroups.com
Here's one way of building initial data into a migration.  I put the data into a subdirectory of db/migrate called 'initial_data' so it's a bit more clear that it was relevant at a particular point in time.  You could certainly get the data some other way that using YAML fixtures loaded by ActiveRecord, but that all depends on what format your data has now.

-Rob
=== db/migrate/001_create_borogroves.rb
require 'active_record/fixtures'

class CreateBorogroves < ActiveRecord::Migration
  class Borogrove < ActiveRecord::Base
    belongs_to :jabberwocky
    acts_as_list :scope => :jabberwocky
    serialize :toves
  end

  def self.up
    create_table :borogroves do |t|
      t.column :name, :string
      t.column :description, :string
      t.column :jabberwocky_id, :integer
      t.column :position, :integer
      t.column :toves, :text
    end

    Borogrove.reset_column_information
    say_with_time("Load initial data from fixture") do
      directory = File.join(File.dirname(__FILE__), "initial_data")
      say "Fixture directory is: #{directory}", true
      Fixtures.create_fixtures(directory, Borogrove.table_name)
    end
  end

  def self.down
    drop_table :borogroves
  end
end

=== db/migrate/initial_data/borogroves.yml
<% stanza = Jabberwocky.find_by_name('stanza') %>
<% counter = 0 %>
stanza_<%= counter += 1 %>:
  id: <%= counter %>
  name: "Fred"
  description: "short"
  jabberwocky_id: <%= stanza.id %>
  position: <%= counter %>
  troves:
    gyre: "only when brillig"
    gimble: occasionally
    slithy: certainly
# and so on...





Keith Davey

unread,
Feb 15, 2007, 4:51:55 AM2/15/07
to rubyonra...@googlegroups.com
Thanks for this, not exactly what I wanted to do but it set me off on the right path.

I didn't know about yaml but once you suggested it I found this:

http://nubyonrails.com/articles/2005/12/27/dump-or-slurp-yaml-reference-data

What I have found is that I can add binary data to the database and then export it out,
and then re-import it later.

Keith
Reply all
Reply to author
Forward
0 new messages