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 | ||
---|---|---|
Code | Expected | Actual |
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 |