find_by_sqlを使用して、リンク元の集計処理をするようにしてみました。

  def self.get_referer(id = nil)
    if id
      condition = "diary_id = #{id}"
    else
      condition = "diary_id IS NULL"
    end
 
    self.find_by_sql(<<-SQL)
      select
        url
      , COUNT(*) as 'count'
      from
        counters
      where
        #{condition}
      group by
        url
      order by
        count DESC
      ;
    SQL
  end

 すげー、超シンプル。今まではソートしたりなんだりいろいろやっていたのが、Rubyでのコードは一切不要になりました。たったこの一行のSQLだけで。SQL最高。なにより速いし。もっと勉強していろいろやってみよう。楽しくなってきました。method_missingを使うfind_by_*よりも、find_by_sqlを使うほうが全然速いんだろうなあ。