Railsの移行により、デフォルトのnullではないプロパティが既存のブールフィールドに追加されます

ブレット

null許容のデフォルト以外のブールフィールドを持つrailsモデルがあり、デフォルトを設定しようとしています。3-statブール問題の回避に関するブログ投稿を見つけたので、これに対応しようとしています。これは私が持っている移行です:

def change
  change_column :table, is_foo, :boolean, null: false, default: false
end

データベースに既存のnull値があるため、移行の実行は失敗します。スキーマの変更を許可するために既存のエントリを更新する正しい方法は何ですか?または、null以外のコントロールをモデルに追加する必要があります。

validates :is_foo, presence: true

これを移行に追加することが「正しい」方法であるかどうかはわかりません。

 Table.update_all(:is_foo => false)

同様に、このフィールドは、nullではない/デフォルトのパラメーターを追加せずに移行によって追加されました。列を追加するための移行でもこれが必要ですか、それともデフォルトで値が設定されますか?これが私が実行した移行です:

add_column :table, is_foo, :boolean

,null: false, default: falseadd_columnに追加した場合、すべての値が正しく設定されていますか?

チパイロン

あなたはこのようにそれを行うことができます:

class UpdateFoo < ActiveRecord::Migration
  def change
    reversible do |direction|
      direction.up {
        Table.where(is_foo: nil).update_all(is_foo: false)
      }
    end
    change_column :table, :is_foo, :boolean, null: false, default: false
  end
end

移行するときまでには、すべてのことを最初に保証するヌルがに変換され、偽、その後、あなたの制限を追加するために列を変更します。

はい、最初の移行に制限が含まれていれば、これを回避できたはずです。

モデル検証を追加するのも正しいと思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Railsの移行により、進行中のデフォルトではない初期値を持つnull:false列が追加されます

分類Dev

検証ディレクティブ/プロパティがフィールドに設定されていないのはなぜですか?

分類Dev

デフォルト値が「whatever」のCassandraテーブルに新しいフィールドを追加するにはどうすればよいですか?

分類Dev

「プロパティの追加」が押される前に、初期のデフォルト入力フィールドを設定するにはどうすればよいですか?

分類Dev

別のプロパティが既存の配列にリストされている場合、マングースで新しいブールフィールドを投影するにはどうすればよいですか?

分類Dev

データを更新するための入力のAngularReactive Formsのデフォルト値は、プレースホルダーではなく値プロパティにバインドされていますが、送信時に「未定義」です。

分類Dev

ドキュメントプロパティフィールドをフッターに追加すると、既存のページ番号が削除されます

分類Dev

テーブルを作成し、2つのフィールドに一意のインデックスを追加するためのRails移行ファイルは、移行中に無視されているようです

分類Dev

GORMデータベースの自動移行により、不要なフィールドがSQLテーブルに追加される

分類Dev

軽量のCoreData移行後に、既存のエンティティの新しいプロパティにデフォルト値を設定するにはどうすればよいですか?

分類Dev

IntelliJでKotlinの「このプロパティにはバッキングフィールドがあります」コードエディタのハイライトを変更するにはどうすればよいですか?

分類Dev

一部のオブジェクトにフィールドがあり、一部のオブジェクトにフィールドがない場合に、「TypeError:undefinedのプロパティ 'weekday_text'を読み取れません」エラーが発生しないようにする方法は?

分類Dev

デフォルトのプロパティ値がまだInit()のパラメータとして表示されているのはなぜですか?

分類Dev

Laravellivewireプロパティのネストされたバインディングがフォームフィールドに値を表示していません

分類Dev

Railsのサブディレクトリではなく、パブリックフォルダのJSファイルとCSSファイルにルーティングするにはどうすればよいですか?

分類Dev

Windows 8がデフォルトで「マウスとキーボードセンター」になっている場合、マウスボタンのプロパティタブを見つけるにはどうすればよいですか?

分類Dev

クラスのコンストラクターでフィールドを宣言して初期化したときに、フィールドがnullまたはデフォルト値のゼロに初期化されるのはなぜですか?

分類Dev

非アクティブなときにデフォルトのWebサイトにロードするにはどうすればよいですか

分類Dev

新しい列をテーブルに追加する移行で、既存の行のデフォルトとは異なる値にする方法

分類Dev

これは、コンストラクターのプロトタイププロパティがオブジェクトに設定されていないインスタンスのデフォルトの動作ですか?

分類Dev

c#devexpress xtrareport既存のレポートでプログラムにより、フィールド名をフィールドリストに追加します

分類Dev

入力されたDBにデフォルト値のないNOTNULLフィールドを追加します

分類Dev

何も変更されていないのに、関連付け/モデルが突然認識されなくなり、あいまいなエラーが未定義のプロパティ 'フィールド'を読み取れなくなります

分類Dev

既存のパネルにフィールドを追加するにはどうすればよいですか?

分類Dev

Windowsフォームの非静的フィールド、メソッド、またはプロパティには、オブジェクト参照が必要です

分類Dev

入力フィールドは、入力されたデータのタイプに応じて、データのフォーマットが異なります。

分類Dev

Elasticsearchで動的に追加されるプロパティのデフォルトのマッピングを「キーワード」に設定する方法

分類Dev

テーブルに新しい列を追加する移行で、既存の行にデフォルトとは異なる値を挿入する方法

分類Dev

スロット「アクティベーター」という名前のVueJS Vuetifyメニューはテンプレートにバインドされていませんが、「デフォルト」になります

Related 関連記事

  1. 1

    Railsの移行により、進行中のデフォルトではない初期値を持つnull:false列が追加されます

  2. 2

    検証ディレクティブ/プロパティがフィールドに設定されていないのはなぜですか?

  3. 3

    デフォルト値が「whatever」のCassandraテーブルに新しいフィールドを追加するにはどうすればよいですか?

  4. 4

    「プロパティの追加」が押される前に、初期のデフォルト入力フィールドを設定するにはどうすればよいですか?

  5. 5

    別のプロパティが既存の配列にリストされている場合、マングースで新しいブールフィールドを投影するにはどうすればよいですか?

  6. 6

    データを更新するための入力のAngularReactive Formsのデフォルト値は、プレースホルダーではなく値プロパティにバインドされていますが、送信時に「未定義」です。

  7. 7

    ドキュメントプロパティフィールドをフッターに追加すると、既存のページ番号が削除されます

  8. 8

    テーブルを作成し、2つのフィールドに一意のインデックスを追加するためのRails移行ファイルは、移行中に無視されているようです

  9. 9

    GORMデータベースの自動移行により、不要なフィールドがSQLテーブルに追加される

  10. 10

    軽量のCoreData移行後に、既存のエンティティの新しいプロパティにデフォルト値を設定するにはどうすればよいですか?

  11. 11

    IntelliJでKotlinの「このプロパティにはバッキングフィールドがあります」コードエディタのハイライトを変更するにはどうすればよいですか?

  12. 12

    一部のオブジェクトにフィールドがあり、一部のオブジェクトにフィールドがない場合に、「TypeError:undefinedのプロパティ 'weekday_text'を読み取れません」エラーが発生しないようにする方法は?

  13. 13

    デフォルトのプロパティ値がまだInit()のパラメータとして表示されているのはなぜですか?

  14. 14

    Laravellivewireプロパティのネストされたバインディングがフォームフィールドに値を表示していません

  15. 15

    Railsのサブディレクトリではなく、パブリックフォルダのJSファイルとCSSファイルにルーティングするにはどうすればよいですか?

  16. 16

    Windows 8がデフォルトで「マウスとキーボードセンター」になっている場合、マウスボタンのプロパティタブを見つけるにはどうすればよいですか?

  17. 17

    クラスのコンストラクターでフィールドを宣言して初期化したときに、フィールドがnullまたはデフォルト値のゼロに初期化されるのはなぜですか?

  18. 18

    非アクティブなときにデフォルトのWebサイトにロードするにはどうすればよいですか

  19. 19

    新しい列をテーブルに追加する移行で、既存の行のデフォルトとは異なる値にする方法

  20. 20

    これは、コンストラクターのプロトタイププロパティがオブジェクトに設定されていないインスタンスのデフォルトの動作ですか?

  21. 21

    c#devexpress xtrareport既存のレポートでプログラムにより、フィールド名をフィールドリストに追加します

  22. 22

    入力されたDBにデフォルト値のないNOTNULLフィールドを追加します

  23. 23

    何も変更されていないのに、関連付け/モデルが突然認識されなくなり、あいまいなエラーが未定義のプロパティ 'フィールド'を読み取れなくなります

  24. 24

    既存のパネルにフィールドを追加するにはどうすればよいですか?

  25. 25

    Windowsフォームの非静的フィールド、メソッド、またはプロパティには、オブジェクト参照が必要です

  26. 26

    入力フィールドは、入力されたデータのタイプに応じて、データのフォーマットが異なります。

  27. 27

    Elasticsearchで動的に追加されるプロパティのデフォルトのマッピングを「キーワード」に設定する方法

  28. 28

    テーブルに新しい列を追加する移行で、既存の行にデフォルトとは異なる値を挿入する方法

  29. 29

    スロット「アクティベーター」という名前のVueJS Vuetifyメニューはテンプレートにバインドされていませんが、「デフォルト」になります

ホットタグ

アーカイブ