Forum: Ruby on Rails Import of YAML files during rake?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
(Guest)
on 2008-10-18 16:20
(Received via mailing list)
I want to import yaml files in to my project.

I have tried with fixtures, but it deletes the current data of the
table.
I need a way to import yaml filen in to a exsistant table.

regards
svend
Daniel B. (Guest)
on 2008-10-18 18:03
(Received via mailing list)
On Oct 18, 11:19 pm, "removed_email_address@domain.invalid" 
<removed_email_address@domain.invalid>
wrote:
> I want to import yaml files in to my project.
>
> I have tried with fixtures, but it deletes the current data of the
> table.
> I need a way to import yaml filen in to a exsistant table.
>

If you want to load yaml data into your development database, for
instance, you can add migrations to do this.
In db/migrate you should have the migration files for your tables
which you created when you generated your models.  Let's suppose you
are loading to the 'users' table then you might run:
% script/generate migration LoadUserData


Migration file might look like this:
----
require 'active_record/fixtures'

class LoadUserData < ActiveRecord::Migration
  def self.up
    down
    directory = File.join( File.dirname(__FILE__) , 'data' )
    Fixtures.create_fixtures(directory, 'users')
  end

  def self.down
    User.delete_all
  end
end
----
where;
'data' is db/migrate/data directory; and
'users' is the db/migrate/data/users.yml file - which will load into
'users' table for your 'User' model.

Then run your migrations:
% rake db:migrate VERSION=0
% rake db:migrate


I think this technique is in the Rails book.

--
Daniel B.
(Guest)
on 2008-10-18 23:14
(Received via mailing list)
Thanx, but using fixtures_create removes the current contense of the
database.
This is not for devel, this is in the production enviroment.

regards
svend
Daniel B. (Guest)
on 2008-10-19 04:20
(Received via mailing list)
On Oct 19, 6:13 am, "removed_email_address@domain.invalid" 
<removed_email_address@domain.invalid>
wrote:
> Thanx, but using fixtures_create removes the current contense of the
> database.
> This is not for devel, this is in the production enviroment.
>
> regards
> svend
>

I've only used the technique I mentioned to populate the table in its
totality.  If you're appending data to a table, you could perhaps
create a loading table as a copy of the table you're loading to (sql:
create <loading-table> as select * from <table> where 1=0; (not sure
if it works on every db) / or do it the migration way).  Use the
fixture technique discussed to load it with data from your yaml file.
Then run an insert sql statement: 'insert into <table> select * from
<loading-table>'.


--
Daniel B.
(Guest)
on 2008-10-19 20:42
(Received via mailing list)
I hate it when people think out of the box, and comes up with a
perfect simple solution.
Perfect, thanx for the help.

regards
svend
This topic is locked and can not be replied to.