50

以下は正しいですか?

 change_column :tablename, :fieldname, :limit => null
4

6 に答える 6

105

以前に移行で制限を指定していて、制限を削除したい場合は、次のように実行できます。

change_column :users, :column, :string, :limit => 255

255 は文字列列の標準の長さであり、レールは以前に指定した制限を一掃します。

更新しました:

nilこれは多くのRailsバージョンで機能しますが、Giuseppeの回答のように使用する方が適しているでしょう.

change_column :users, :column, :string, :limit => nil

つまり、あなたが間違っていたのは、null代わりにnil.

于 2010-12-07T07:04:56.530 に答える
34

これが私に起こったことです。

テーブルにある文字列フィールドではコンテンツを保持するのに十分ではないことに気付いたので、次を含む移行を生成しました。

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
于 2010-12-29T14:08:26.200 に答える
3

列タイプを に変更します:text。制限はありません。

change_column :tablename, :fieldname, :text, :limit => nil
于 2010-12-07T08:04:49.947 に答える
0

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
于 2010-08-14T21:18:12.683 に答える
0

制限のない文字列は、ほとんどのデータベースがサポートするものではありませんvarchar(SIZE)。定義でサイズを指定する必要があります。
試してみることもできますが、個人的には:limit => BIG_ENOUGH_NUMBER. 非常に大きなテキストには CLOB 型の使用を検討することもできます。

于 2010-08-14T17:01:38.023 に答える
0

今日も同じで、テキスト フィールドに追加した制限を削除しようとしましたが、うまくいきませんでした。いくつかの移行を試みました。

レール 4.2.7.1 ルビー 2.3.1p112

結局、うまくいったのは 255 の制限を指定することだけでした。それ以外の値に調整しようとしてもうまくいきませんでした。

于 2017-03-31T16:24:23.427 に答える