テーブル情報からModelを動的生成する方法 (ActiveRecordの単体利用時)


# [前提]
#   以下の様なデータを持つusersテーブルが作成されているとする。
#     | id | name   |
#     |  1 | taro   |
#     |  2 | hanako |

require 'active_record'

# ここは使用するDBにあわせる(この例ではSQLite3)
ActiveRecord::Base.establish_connection(
  "adapter"  => "sqlite3",
  "database" => "./hoge.sqlite3"
)

# 各テーブルのModelを動的に作成する
ActiveRecord::Base.connection.tables.each do |table_name|
  class_name = table_name.singularize.camelcase
  self.class.const_set class_name, Class.new(ActiveRecord::Base)
end

# 以降、いつもどおりにModelを扱える
User.all
# => [#<User id: 1, name: "taro">, #<User id: 2, name: "hanako">]