Why all the Active Record hate? [closed]

There’s ActiveRecord the Design Pattern and ActiveRecord the Rails ORM Library, and there’s also a ton of knock-offs for .NET, and other languages.

These are all different things. They mostly follow that design pattern, but extend and modify it in many different ways, so before anyone says “ActiveRecord Sucks” it needs to be qualified by saying “which ActiveRecord, there’s heaps?”

I’m only familiar with Rails’ ActiveRecord, I’ll try address all the complaints which have been raised in context of using it.

@BlaM

The problem that I see with Active Records is, that it’s always just about one table

Code:

class Person
    belongs_to :company
end
people = Person.find(:all, :include => :company )

This generates SQL with LEFT JOIN companies on companies.id = person.company_id, and automatically generates associated Company objects so you can do people.first.company and it doesn’t need to hit the database because the data is already present.

@pix0r

The inherent problem with Active Record is that database queries are automatically generated and executed to populate objects and modify database records

Code:

person = Person.find_by_sql("giant complicated sql query")

This is discouraged as it’s ugly, but for the cases where you just plain and simply need to write raw SQL, it’s easily done.

@Tim Sullivan

…and you select several instances of the model, you’re basically doing a “select * from …”

Code:

people = Person.find(:all, :select=>'name, id')

This will only select the name and ID columns from the database, all the other ‘attributes’ in the mapped objects will just be nil, unless you manually reload that object, and so on.

Leave a Comment