36

Railsの移行を通じて固定長SQL列(たとえばCHAR(12))を定義する最良の方法は何ですか?

これがモデルで処理されるべきではない理由は、char()とvarchar()のパフォーマンスのためであり、データベースに生のSQLを挿入することは避けたいと思います。

編集:私は:limit修飾子を知っていますが、フィールドはまだvarchar(パフォーマンスに悪い)であり、最小サイズを許可していません。

4

4 に答える 4

54

Rails が列の型を認識しない場合は、そのままデータベースに渡します。したがって、varchar の代わりに char が必要な場合は、次のように置き換えます。

t.column :token, :string

と:

t.column :token, "char(12)"

もちろん、これにより、移行が別のデータベースに移植できなくなる場合とそうでない場合があります。

( http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrationsへのクレジット)

于 2011-05-06T15:01:56.560 に答える
28
 def self.up
    add_column("admin_users", "username", :string, :limit => 25)
 end

 def self.down
    remove_column("admin_users", "username")
 end
于 2011-04-04T09:04:09.890 に答える
9

次のように、移行ファイルで制限オプション付きの文字列型を使用できます。

t.string :name, :limit => 12, :null => false
于 2011-04-04T09:03:45.883 に答える