Acho que o que você realmente está procurando é isso:
has_many :posts, :finder_sql =>
proc {"SELECT p.* from posts p join topics t on p.topic_id = t.id where t.id=#{id}"}
A partir do Rails 3.1 você tem que usar um proc ao invés de uma string para usar campos como
#{id}
. Veja o problema aqui:https://github.com/rails/rails/issues/3920