ActiveRecord tips

気づいたこと、ちょっとしたことを書いていこうかな。

対象バージョン 2.0.2

SQLを生成

ActiveRecord::Base.findが内部で使ってるメソッドを呼べば、findと同じパラメータを使って、同様のSQLを組み立てられる。サブクエリなんかに使えるよね。行儀悪いけど。

Shop.send(:construct_finder_sql, {:conditions => ["id IN (?)", [1,2,3]]})

SQLを実行して、結果をカラム名をキーとするハッシュの配列で得る

ActiveRecord::ConnectionAdapters::AbstractAdapter#select_allを使う。

# PostgreSQLでテーブル名一覧を取得
Shop.connection.select_all(<<-SQL)
SELECT SCHEMANAME, TABLENAME 
FROM PG_TABLES 
WHERE NOT TABLENAME LIKE 'pg%' AND NOT SCHEMANAME = 'information_schema' 
ORDER BY SCHEMANAME, TABLENAME
SQL
# => [{"schemaname"=>"public", "tablename"=>"shops"}, ...]