2011-12-26 8 views
3

私はデフォルトサイズ(MySQLの)

rails g model StripeCustomer user_id:integer customer_id:integer 
annotate 

を実行すると、私は

# == Schema Information 
# Table name: stripe_customers 
# id   :integer(4)  not null, primary key 
# user_id  :integer(4) 
# customer_id :integer(4) 
# created_at :datetime 
# updated_at :datetime 

を得たことを意味していますか? (キーのデフォルトサイズがどれくらい小さいかは非常に驚きです)。既存のテーブルでデフォルトIDを7桁に変更するにはどうすればよいですか?

ありがとうございます。

答えて

2

のmysqlクライアントのdescribeコマンドは本当に表示幅docs参照)、非常におそらくによって生成されたOPの質問のスキーマ情報を使用していますが、それぞれのlimit属性を使用していますannontate_models gemget_schema_info方法カラム。また、制限属性は、バイナリおよび整数列(docsを参照)の場合は、のバイト数です。

方法は、(最後の行が制限を加える方法を参照)を読み取り:

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})" 
    else 
     col_type << "(#{col.limit})" if col.limit 
    end 

    #...   
end 
2

Railsは実際には標準のMySQL整数型、つまり、ここでは4つのバイトを意味します(docsを参照)

+0

あなたは正しいです。私はそれに応じて私の答えを編集しました。 – maprihoda

関連する問題