Добавление: по умолчанию => true для boolean в существующем столбце Rails
Я видел несколько вопросов (а именно этот) здесь о 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
может кто подскажет, что я делаю неправильно здесь?
4 ответов
change_column
метод ActiveRecord::Migration
, поэтому вы не можете назвать это так в консоли.
если вы хотите добавить значение по умолчанию для этого столбца, создайте новую миграцию:
rails g migration add_default_value_to_show_attribute
затем в созданной миграции:
def up
change_column :profiles, :show_attribute, :boolean, default: true
end
def down
change_column :profiles, :show_attribute, :boolean, default: nil
end
затем запустите rake db:migrate
.
это ничего не изменит к уже созданным записям. Для этого вам нужно будет создать rake task
или просто rails console
и обновить все учетная документация.
когда вы добавили t.boolean :show_attribute, :default => true
до create_profiles
миграция, это нормально, если она ничего не сделала. Выполняются только миграции, которые еще не были выполнены. Если вы начали с новой базы данных, то по умолчанию будет установлено значение true.
в качестве варианта принятого ответа вы также можете использовать change_column_default
метод в миграции:
def up
change_column_default :profiles, :show_attribute, true
end
def down
change_column_default :profiles, :show_attribute, nil
end
Я не уверен, когда это было написано, но в настоящее время, чтобы добавить или удалить значение по умолчанию из столбца в миграции, вы можете использовать следующее:
change_column_null :products, :name, false
рельсы 5:
change_column_default :products, :approved, from: true, to: false
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
рельсы 4.2:
change_column_default :products, :approved, false
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
, который является аккуратным способом избегайте просмотра ваших миграций или схемы для спецификаций столбцов.
change_column :things, :price_1, :integer, default: 123, null: false
кажется, лучший способ добавить значение по умолчанию в существующий столбец, который не имеет null: false
уже.
иначе:
change_column :things, :price_1, :integer, default: 123
некоторые исследования я сделал на это:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b