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

105
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

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

kxhitiz
источник
см. 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
Артур Педроса
источник