Skip to Content
Rails: Up and Running, 2nd Edition
book

Rails: Up and Running, 2nd Edition

by Bruce Tate, Lance Carlson, Curt Hibbs
October 2008
Beginner to intermediate
224 pages
5h 34m
English
O'Reilly Media, Inc.
Content preview from Rails: Up and Running, 2nd Edition

Trees

Let’s think about the most complex relationship in Photo Share: nested categories. You could implement categories by adding belongs_to :category and has_many :categories to the Category class. The resulting code would be awkward because a category would have an attribute called category (for the parent) and another called categories for the children. parent and children attributes would be better, but you’d be forced to override Active Record naming conventions and to write much more code.

This arrangement is common enough that Active Record has the acts_as_tree relationship, shown in Figure 4-6. Just as you did with acts_as_list, you will need to install a plug-in.

$ script/plugin install acts_as_tree
+ ./README
+ ./Rakefile
+ ./init.rb
+ ./lib/active_record/acts/tree.rb
...

acts_as_tree requires a foreign key called parent_id by default. Recall that we added parent_id to photos as part of the initial photos create_categories migration in Chapter 2. If you choose to use the default foreign key, Active Record will find it. Otherwise, you’d have to use the :foreign_key option. The methods and attributes added through acts_as_tree will use the foreign key to organize your tree, adding parent and children attributes to your class so each instance becomes a node of a tree. The root of the tree has a parent id of nil.

The acts_as_tree relationship is recursive, with an entity (Category) acting as both parent and children

Figure 4-6. The acts_as_tree relationship is recursive, with an entity ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Ruby on Rails: Up and Running

Ruby on Rails: Up and Running

Bruce Tate, Curt Hibbs
Rails 3 in Action

Rails 3 in Action

Yehuda Katz, Ryan Bigg

Publisher Resources

ISBN: 9780596522001Errata Page