This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Using Object Relational Mapping with ActiveRecord
CodeExpectedActual
require 'cookbook_dbconnect'
activerecord_connect               # See chapter introduction
class BlogPost < ActiveRecord::Base
  has_many :comments
end
class Comment < ActiveRecord::Base
  belongs_to :blog_post
end
post = BlogPost.create(:title => 'First post', 
                       :content => "Here are some pictures of our iguana.")
comment = Comment.create(:blog_post => post, :author => 'Alice',
                         :content => "That's one cute iguana!")
post.comments.create(:author => 'Bob', :content => 'Thank you, Alice!')
blog_post = BlogPost.find(:first)
puts %{#{blog_post.comments.size} comments for "#{blog_post.title}"}
2 comments for "First post"
2 comments for "First post"
blog_post.comments.each do |comment|
  puts "Comment author: #{comment.author}"
  puts "Comment: #{comment.content}"
end
Comment author: Alice
Comment: That's one cute iguana!
Comment author: Bob
Comment: Thank you, Alice!
Comment author: Alice
Comment: That's one cute iguana!
Comment author: Bob
Comment: Thank you, Alice!
first_comment = Comment.find(:first)
puts %{The first comment was made on "#{first_comment.blog_post.title}"}
The first comment was made on "First post"
The first comment was made on "First post"
class User < ActiveRecord::Base
  has_and_belongs_to_many :blog_posts
end
class BlogPost < ActiveRecord::Base
  has_and_belongs_to_many :authors, :class_name => 'User'
  has_many :comments, :dependent => true
end
Retroactively make Bob and Carol the collaborative authors of our
first blog post.
User.create(:name => 'Bob', :blog_posts => [post])
User.create(:name => 'Carol', :blog_posts => [post])
author = User.find(:first)
puts "#{author.name} has made #{author.blog_posts.size} blog post(s)."
Bob has made 1 blog post(s).
Bob has made 0 blog post(s).
puts %{The blog post "#{post.title}" has #{post.authors.size} author(s).}
The blog post "First post" has 2 author(s).
The blog post "First post" has 2 author(s).
author.blog_posts.create(:title => 'Second post', 
                         :content => 'We have some cats as well.')
author.blog_posts.each do |post|
  puts %{#{author.name}'s blog post "#{post.title}" } +
       "has #{post.comments.size} comments."
end
Bob's blog post "First post" has 2 comments.
Bob's blog post "Second post" has 0 comments.
Bob's blog post "Second post" has 0 comments.
BlogPost.find(:first).destroy
class BlogPost < ActiveRecord::Base
  has_many :comments, :dependent => true
end
nil