when and how to use ActiveRecord::Migration

Interestingly, the text book

Practical Ruby Gems
http://www.apress.com/book/view/9781590598115
listing 5-1

uses ActiveRecord::Base wheras ActiveRecord::Migration would give more
flexibility, right?

How would I implement this change, pls?

thufir@ARRAKIS:~/projects/aggregator$
thufir@ARRAKIS:~/projects/aggregator$ cat rss2mysql.rb
require 'rubygems'
require 'active_record'
require 'feed_tools'
require 'yaml'
require 'items'

def all

feed_url = ‘http://www.slashdot.org/index.rss

feed=FeedTools::Feed.open(feed_url)
feed.items.each do |feed_item|
  unless (Items.find_by_title(feed_item.title) \
          or Items.find_by_url(feed_item.link) \
          or Items.find_by_guid(feed_item.guid))
  puts "processing item '#{feed_item.title}' - new"

    Items.new do |newitem|
       newitem.title=feed_item.title.gsub(/<[^>]*>/, '')
       newitem.guid=feed_item.guid
       if feed_item.publisher.name
           newitem.source=feed_item.publisher.name
       end
       newitem.url=feed_item.link
       newitem.content=feed_item.description
       newitem.timestamp=feed_item.published
       newitem.save
    end
  else
    puts "processing item '#{feed_item.title}' - old"
  end
end

end

Items.connect
all
thufir@ARRAKIS:~/projects/aggregator$
thufir@ARRAKIS:~/projects/aggregator$ cat items.rb

class Items < ActiveRecord::Base

def Items.connect

      db = YAML.load_file("database.yml")
    ActiveRecord::Base.establish_connection(
        :adapter => db["adapter"],
        :host => db["host"],
        :username => db["username"],
        :password => db["password"],
        :database => db["database"])

# If the table doesn't exist, we'll create it.
unless Items.table_exists?
  ActiveRecord::Schema.define do
    create_table :items do |t|
        t.column :title, :string
        t.column :content, :string
        t.column :source, :string
        t.column :url, :string
        t.column :timestamp, :timestamp
        t.column :keyword_id, :integer
        t.column :guid, :string
        t.column :html, :string
      end
  end
end

end #connect

end
thufir@ARRAKIS:~/projects/aggregator$
thufir@ARRAKIS:~/projects/aggregator$ cat items2.rb
class Items2 < ActiveRecord::Migration
    def self.up
        create_table :items do |t|
            t.column :title, :string
            t.column :content, :string
            t.column :source, :string
            t.column :url, :string
            t.column :timestamp, :timestamp
            t.column :keyword_id, :integer
            t.column :guid, :string
            t.column :html, :string
        end
        end
        def self.down
                drop_table :items
        end
end
thufir@ARRAKIS:~/projects/aggregator$
thufir@ARRAKIS:~/projects/aggregator$

thanks,

Thufir

Interestingly, the text book

Practical Ruby Gemshttp://www.apress.com/book/view/9781590598115
listing 5-1

uses ActiveRecord::Base wheras ActiveRecord::Migration would give more
flexibility, right?

I imagine they are just showing you that there is more than one way to
do things.

How would I implement this change, pls?

Which change ?

Fred

What I mean is, if it's

class Items < ActiveRecord::Migration

then there cannot be a query as below:

claims = Items.find( :all)

Or, I suppose you don't query in that fashion, as the migration file
will basically just have self.up and down (for me). How is the
migration in AR linked to the Base class, which is queriable, in a non-
rails scenario?

I suppose the driver will invoke the migration, but how is the
migration tied to the model (the Item class, versus Items the
migration)?

thanks,

Thufir

> Which change ?

What I mean is, if it's

class Items < ActiveRecord::Migration

then there cannot be a query as below:

claims = Items.find( :all)

Correct.

Or, I suppose you don't query in that fashion, as the migration file
will basically just have self.up and down (for me). How is the
migration in AR linked to the Base class, which is queriable, in a non-
rails scenario?

I don't think it is.

I suppose the driver will invoke the migration, but how is the
migration tied to the model (the Item class, versus Items the
migration)?

There is no correspondence between models and migrations. For a given
model there will frequently be a migration that creates the
appropriate table but you don't have to go that way.

Fred