Я видел несколько вопросов (а именно этот ) здесь, в SO, о добавлении логического значения по умолчанию в существующий столбец. Так что я попробовал change_column
предложение, но я не должен делать это правильно.
Я попытался:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Который возвращается -bash: change_column: command not found
Я тогда побежал:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
...и
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Затем побежал rake db:migrate
, но ценность для :show_attribute
осталась nil
. В вопросе, на который я ссылался выше, говорится, что в PostgreSQL вам необходимо обновить его вручную. Так как я использую PostgreSQL, я добавил следующее в свою create_profiles
миграцию:
t.boolean :show_attribute, :default => true
Может кто-нибудь сказать мне, что я здесь делаю не так?
источник
up
методе миграции, который является новым классом, который будет сгенерирован в db / migrate /. (down
Метод должен быть написан, чтобы отменить то, чтоup
делает.) Затем внесите это изменениеrake db:migrate
.def self.up
иdef self.down
show
или как там будет имя столбца.В качестве варианта принятого ответа вы также можете использовать
change_column_default
метод при миграции:Rails API-документы
источник
show
или как там будет имя столбца.show_attribute
это название колонки, я не думаю, что rails 5 имеет к этому какое-то отношение, верно?Я не уверен, когда это было написано, но в настоящее время, чтобы добавить или удалить значение по умолчанию из столбца в миграции, вы можете использовать следующее:
Рельсы 5:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
Рельсы 4.2:
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
Это отличный способ избежать просмотра ваших миграций или схемы спецификаций столбцов.
источник
null: false
и вdefault: :something
основномКроме того, согласно документу:
https://guides.rubyonrails.org/active_record_migrations.html
Так что нет готового рельса генератора. Как указано в ответах выше, вы должны вручную заполнить файл миграции с помощью
change_column_default
метода.Вы можете создать свой собственный генератор: https://guides.rubyonrails.org/generators.html
источник
Если вы только что выполнили миграцию, вы можете выполнить откат, а затем снова выполнить миграцию.
Для отката вы можете сделать столько шагов, сколько захотите:
Или, если вы используете Rails 5.2 или новее:
Затем вы можете просто выполнить миграцию снова:
Не забудьте
rake db:migrate
и если вы используете герокуheroku run rake db:migrate
источник
Кажется, это лучший способ добавить значение по умолчанию к существующему столбцу, которого еще нет
null: false
.В противном случае:
Некоторые исследования, которые я провел по этому вопросу:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b
источник
Если вы не хотите создавать другой файл миграции для небольшого недавнего изменения - из Rails Console:
Затем выйдите и снова войдите в консоль rails, чтобы изменения в DB вступили в силу. Тогда, если вы сделаете это ...
Вы должны увидеть значение по умолчанию "show_attribute" как true.
Для существующих записей, если вы хотите сохранить существующие "ложные" настройки и обновить только значения "nil" до новых значений по умолчанию:
Обновите миграцию, которая создала эту таблицу, чтобы любые будущие сборки БД получали ее с самого начала. Также запустите тот же процесс на всех развернутых экземплярах БД.
При использовании метода «new dbigration» вы можете обновить существующие nil-значения в этой миграции.
источник