私は素早くグーグルをした後、未処理のSQLなしでこれを達成するための既製の方法が見つかりませんでした。しかし、annotate_models
が行うことを模倣することで、あなた自身の解決策を作り出すことができます。 https://github.com/ctran/annotate_models/blob/master/lib/annotate/annotate_models.rb
# Use the column information in an ActiveRecord class
# to create a comment block containing a line for
# each column. The line contains the column name,
# the type (and length), and any optional attributes
def get_schema_info(klass, header, options = {})
info = "# #{header}\n#\n"
info << "# Table name: #{klass.table_name}\n#\n"
max_size = klass.column_names.collect{|name| name.size}.max + 1
klass.columns.each do |col|
attrs = []
attrs << "default(#{quote(col.default)})" unless col.default.nil?
attrs << "not null" unless col.null
attrs << "primary key" if col.name == klass.primary_key
col_type = col.type.to_s
if col_type == "decimal"
col_type << "(#{col.precision}, #{col.scale})"
から
作品また、あなたはActiveRecord Migrations Guideが提供しているものを読みたいかもしれません。
ActiveRecord::Schema.define(:version => 20080906171750) do
create_table "authors", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
end
このファイルは、その上のデータベースを検査し、CREATE_TABLE、ADD_INDEXを使用して、その構造を表現する、として作成されます。これはデータベースに依存しないため、Active Recordがサポートするデータベースにロードできます。これは、複数のデータベースに対して実行できるアプリケーションを配布する場合に非常に便利です。
ただし、トレードオフがあります.db/schema.rbは、外部キー制約、トリガー、ストアドプロシージャなどのデータベース固有の項目を表すことはできません。マイグレーション中にカスタムSQLステートメントを実行することはできますが、スキーマ・ダンプはステートメントをデータベースから再構成することはできません。このような機能を使用している場合は、スキーマ形式を:sqlに設定する必要があります。
アクティブレコードのスキーマダンプを使用する代わりに、データベースの構造はdb/structure:dump Rakeタスクを介してdb/structure.sqlにデータベース固有のツールを使用してダンプされます。たとえば、PostgreSQL RDBMSの場合、pg_dumpユーティリティが使用されます。 MySQLの場合、このファイルにはさまざまなテーブルのSHOW CREATE TABLEの出力が含まれます。これらのスキーマをロードすることは、それが含んでいるSQL文を実行するだけの問題です。定義すると、データベース構造の完全なコピーが作成されます。ただし、:sqlスキーマ形式を使用すると、スキーマの作成に使用されたもの以外のRDBMSへのスキーマのロードが防止されます。
をしたい場合は、すべてのメソッドは、最終的権利、ショーはtable'を作成 '呼ぶことを実現していますか?あなたはそれを自分で呼ぶことはしたくないのですか? :) –
@SergioTulentsev私は、ActiveRecordアダプタが私のためのテーブル構文の作成に微妙な違いを扱うと仮定しています。例えば一方のテーブルがMySQLで、他方がSQLiteである場合 – z5h