Назначение значения по умолчанию при создании файла миграции


105
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Хорошо, я использую строку выше для создания файла миграции, который автоматически генерирует код в сгенерированном файле, чтобы добавить столбец в твит модели с целым числом типа данных. Теперь я хочу добавить значение по умолчанию в добавленный столбец при создании файла миграции. Это возможно? Я погуглил, но не нашел. Ребят нужна помощь.


см. RailsGuide по этой теме: guides.rubyonrails.org/migrations.html информация, которую вы ищете, находится в первом разделе «Анатомия миграции»
— Остин Лин

1
Я точно знаю, что вы имеете в виду. Я продолжал пытаться установить значение по умолчанию, и пытаться найти информацию было своего рода болью. Было проще сгенерировать чистый SQL, хотя тогда не было миграции в системе контроля версий.
— ТАСС

Ответы:


167

Генератор миграции по умолчанию не обрабатывает значения по умолчанию ( модификаторы столбцов поддерживаются, но не включают defaultили null), но вы можете создать свой собственный генератор.

Вы также можете вручную обновить файл миграции перед запуском rake db:migrate, добавив параметры в add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... и прочтите Rails API


9
Хорошо, спасибо за ответ. Я подумал, что было бы замечательно, если бы генератор миграции по умолчанию предоставлял возможность обрабатывать значения по умолчанию, чтобы мне не приходилось редактировать файл миграции после создания, чтобы указать значение по умолчанию.
— kxhitiz


10

Да, я тоже не видел, как использовать "default" в команде генератора миграции, но смог указать значение по умолчанию для нового строкового столбца, как показано ниже, изменив сгенерированный файл миграции перед применением "rake db: migrate":

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Это добавляет новый столбец под названием «цвет» в мою модель «Виджет» и устанавливает «цвет» по умолчанию для новых виджетов на «красный».


(Это было в Rails 4.2.)
— MSC

4

Я попробовал t.boolean: active,: default => 1 в файле миграции для создания всей таблицы. После запуска этой миграции, когда я зарегистрировал db, он стал нулевым. Хотя я сказал по умолчанию как «1». После этого я немного изменил файл миграции, как этот, тогда он сработал для меня, чтобы установить значение по умолчанию для создания файла миграции таблицы.

t.boolean: active,: null => false,: default => 1. Работал у меня.

Моя версия фреймворка Rails - 4.0.0


:default => false?
— Christopher Oezbek

2

Сначала вам нужно будет создать миграцию для основ модели, затем вы создадите другую миграцию, чтобы изменить предыдущую, используя change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.