ActiveRecordでset_table_nameを使わずにテーブル名を変えてクエリを実行する
Rails 3.1.3で試した。
影響の大きいset_table_nameを使わずに、O/RマッパーとかSQL生成とかActiveRecordの便利な機能を使いつつ、別名のテーブルにクエリを実行する。
# "Hoge"というモデルがあって、デフォルトで関連づけられた "hoges" テーブルではなく、 # "hoges_2012" という別テーブルにアクセスする例。 target_table = "hoges_2012" record = Hoge.where(id:1) result = record.find_by_sql( record.to_sql.gsub( record.table_name, target_table ) )
できたー\(^O^)/
テキストを置換して強引にやってるので、その分負荷があるからOLTPなサービスとかでは使いづらいけど、裏側で回す解析処理とかならこれで十分。