Ruby on Railsのためのvarchar型の移行の質問
-
12-09-2019 - |
質問
私はコラム「ノート」を含む新しいテーブルを作成しました。デフォルトでは、私は信じているVARCHAR(255)ですが、私はこの列がフィールド対テキスト領域であると、より多くのデータを許可することを望みます。私はActiveRecordの::移行ファイルでこの変更を行うだろうと想像しますが、私は形式になど興味があります。私は単に、たとえばVARCHAR(1000)にはvarchar(255)を変更しますか? (そのフォーマットするものですか?
def self.up
create_table :notes do |t|
t.string :note :varchar(1000)
end
は、適切なフォーマットということですか?さらに、どのように私は、入力フィールドが複数行であることを得るのです。申し訳ありませんが、これは簡単なものですが、私はプログラミングやRoRのに新しいです場合。ありがとうございました。
解決
あなたは、単に代わりに「文字列」の「テキスト」タイプを使用することができます。
def self.up
create_table :notes do |t|
t.text :note
end
end
「テキスト」タイプを使用すると、TEXT型のデータベース列になります。 VARCHARは、通常、(MySQLでは、他のRDBMSは、同様の限界を有する)255の最大長さに制限されます。
あなたが使用している場合は(テキスト 『Railsのそれは型であるため)フォームヘルパー、のテキストエリアは、このフィールドに出力されます』。 TEXTAREA 複数行入力を受け付けるフォーム要素である
編集:あなたはすでにCREATE_TABLEを移行した場合は、列の型を変更するには、新しい移行を作成することができます:
def self.up
change_column :notes, :note, :text
end
他のヒント
正しい形式は次のようになり
t.string :note, :limit => 1000
あなたが256文字より長いのvarcharをサポートしてMySQLの(またはいずれかのデータベース)のバージョンを使用していることを確認します。
あなたは大規模なテキストブロックを使用する場合、それは次のようになります。
t.text :note
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdaptersを参照してください。 /TableDefinition.html の詳細については、
あなたはようlimitオプションで長さを変更することができます...
def self.up
change_column :notes, :note, :string, :limit => 1000
end
私は
使用しましたself.up
change_column :notes, :note, :text, :limit => nil
end
私はオフのままにしておくと、:制限=> nilのオプションを、列タイプがテキストにvarchar型から変更するだろうが、それはまだ255文字の最大長を持っていた。
。