以下は正しいですか?
change_column :tablename, :fieldname, :limit => null
以下は正しいですか?
change_column :tablename, :fieldname, :limit => null
以前に移行で制限を指定していて、制限を削除したい場合は、次のように実行できます。
change_column :users, :column, :string, :limit => 255
255 は文字列列の標準の長さであり、レールは以前に指定した制限を一掃します。
更新しました:
nil
これは多くのRailsバージョンで機能しますが、Giuseppeの回答のように使用する方が適しているでしょう.
change_column :users, :column, :string, :limit => nil
つまり、あなたが間違っていたのは、null
代わりにnil
.
これが私に起こったことです。
テーブルにある文字列フィールドではコンテンツを保持するのに十分ではないことに気付いたので、次を含む移行を生成しました。
def self.up
change_column :articles, :author_list, :text
end
ただし、移行を実行した後、スキーマには次のようになりました。
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list", :limit => 255
end
それはOKではありませんでした。そこで、次のように移行を「やり直し」ました。
def self.up
# careful, it's "nil", not "null"
change_column :articles, :author_list, :text, :limit => nil
end
今回は、schema.rbで制限がなくなりました。
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list"
end
列タイプを に変更します:text
。制限はありません。
change_column :tablename, :fieldname, :text, :limit => nil
db ドライバに依存しないようにするには、次のように書く必要があります。
add_column :tablename, :fieldname_tmp, :text
Tablename.reset_column_information
Tablename.update_all("fieldname_tmp = fieldname")
remove_column :tablename, :fieldname
rename_column :tablename, :fieldname_tmp, :fieldname
制限のない文字列は、ほとんどのデータベースがサポートするものではありませんvarchar(SIZE)
。定義でサイズを指定する必要があります。
試してみることもできますが、個人的には:limit => BIG_ENOUGH_NUMBER
. 非常に大きなテキストには CLOB 型の使用を検討することもできます。
今日も同じで、テキスト フィールドに追加した制限を削除しようとしましたが、うまくいきませんでした。いくつかの移行を試みました。
レール 4.2.7.1 ルビー 2.3.1p112
結局、うまくいったのは 255 の制限を指定することだけでした。それ以外の値に調整しようとしてもうまくいきませんでした。