Mighty Associations

Extends many of your associations for free. Given the following models:

class Task < ActiveRecord::Base
  belongs_to :project
end

class Project < ActiveRecord::Base
  has_many :tasks
  belongs_to :company

  named_scope :five_letters, :conditions => "LENGTH(name) = 5"
end

class Company < ActiveRecord::Base
  has_many :projects
  has_many :tasks, :through => :project

  named_scope :five_letters, :conditions => "LENGTH(name) = 5"
end

You can:

Get all projects belonging to a company:

Company.projects

Get all projects belonging to a company with a 5-letter name:

Company.five_letters.projects

It also works with has_many :through associations:

Company.tasks
Company.five_letters.tasks

Return value is a scope, so you can still chain it:

Company.five_letters.projects.find_by_name("Wadus")

The same applies for belongs_to associations, for example you can get the companies with a five-letter project:

Project.five_letter.companies

Copyright © 2009 BeBanjo, released under the MIT license