Uma das coisas interessantes no uso de Seaside e Smalltalk é o Glorp, uma camada de acesso ao banco de dados que permite o uso da própria sintaxe do Smalltalk para gerar queries. Essa é uma das coisas que o Rails não tinha e, por melhor que a sintaxe do ActiveRecord seja, ainda é muito opaca.
A palavra-chave na frase acima é tinha porque agora o Rails pode contar com isso. Um grupo de luminares da comunidade Rails lançou uma nova gem chamada ambition que faz exatamente isso. Embora o projeto esteja no começo, já está funcionando a todo vapor e os resultados são promissores.
Alguns exemplos do uso estão abaixo (retirados diretamente da entrada referenciada acima) e mostram o potencial de uma ferramenta assim:
User.first
SELECT * FROM users LIMIT 1
User.select { |m| m.name != "macgyver" }
SELECT * FROM users WHERE users.name <> "macgyver"
User.select { |u| u.email =~ /chris/ }.first
SELECT * FROM users WHERE (users.email REGEXP "chris") LIMIT 1
User.select { |u| u.karma > 20 }.sort_by(&:karma).first(5)
SELECT * FROM users WHERE (users.karma > 20)
ORDER BY users.karma LIMIT 5
User.select { |u| u.email =~ "ch%" }.size
SELECT count(*) AS count_all FROM users
WHERE (users.email LIKE "ch%")
User.sort_by { |u| [ u.email, -u.created_at ] }
SELECT * FROM users ORDER BY users.email, users.created_at DESC
User.detect { |u| u.email =~ "chris%" && u.profile.blog == "Err" }
SELECT users.id AS t0_r0 ... FROM users
LEFT OUTER JOIN profiles ON profiles.user_id = users.id
WHERE ((users.email LIKE "chris%" AND profiles.blog = "Err"))
LIMIT 1
Como é fácil perceber, a leitura do código fica muito mas interessante e prático, reduzindo a possibilidade de erros e aumentando a expressividade da linguagem. Esse é possivelmente o melhor exemplo de uma DSL que eu já vi para o Ruby/Rails e com certeza vai se tornar algo dominante entre os desenvolvedores.

Eu fiz algo parecido em Python:
http://cheeseshop.python.org/pypi/simpleQL
Mas não permite inserts nem queries mais complexas.
Roberto
Eu gostei, mas será que a comunidade vai adotar?
Poxa, “roubaram” minha idéia :p Fiz algo parecido (e limitado) numa recente implementação minha de ActiveRecord no Delphi (Ah, isso pq *é* preciso fazer algo novo e grande num sistema legado…). Achei genial o “|u|”, não tinha pensado nisso… Agora, não gostei do nome “detect”, nem da confusão entre “Entidade” e “Coleção de Entidades” que “Entidade.Select” causa. Para resolver isso (e outras coisas) eu implemento “Repository” de forma genérica que me serve tanto como DAO (na verdade abstraindo este caso exista ou não) quanto como Coleção da Entidade (Fiz ele descender da minha TColletion). Enfim, não é pq o sistema é legado que as idéias usadas precisam ser…
Roberto, ficou muito legal a implementação. Bem Python mesmo.
—
Carlos, não garanto, mas é muito melhor do que o ActiveRecord. Com uma refinada e suporte a todos os métodos possíveis, vai ficar muito bom–especialmente no que tange a buscas mais complexas de uma forma mais simples.
—
Witaro, o Glorp, do Smalltalk, usava o conceito de repositório até uma versão mais recente mas agora também aceitam uma espécie de ActiveRecord. Eu acho que é uma espécie de meio termo porque um conceito mais direto é mais útil quando se está começando.