Rails移行を通じて固定長SQL列(たとえば、CHAR(12))を定義する最良の方法は何ですか?
これがモデルで処理されるべきではない理由は、char()とvarchar()のパフォーマンスが原因であり、データベースに生のSQLを挿入することは避けたいです。
編集:私は:limit修飾子を知っていますが、フィールドはまだvarchar(パフォーマンスに悪い)であり、最小サイズを許可していません。
Railsが列のタイプを認識しない場合、それはデータベースに直接渡されます。したがって、varcharではなくcharが必要な場合は、次のように置き換えます。
t.column :token, :string
と:
t.column :token, "char(12)"
もちろん、これにより、移行が別のデータベースに移植できなくなる場合があります。
(クレジット http://laurelfan.com/2010/1/26/special-mysql-types-in-Rails-migrations )
def self.up
add_column("admin_users", "username", :string, :limit => 25)
end
def self.down
remove_column("admin_users", "username")
end
次のように、移行ファイルで制限オプション付きの文字列型を使用できます。
t.string :name, :limit => 12, :null => false
データベース固有のタイプの場合、次を使用できます。
t.column(:column_name, 'char(12)')
そして完全な例として:
class Foo < ActiveRecord::Migration
def change
create_table :foo do |t|
t.column(:column_name, 'custom_type')
t.timestamps
end
end
end