Призначення значення за замовчуванням під час створення файлу міграції


104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Гаразд, я використовую верхній рядок, щоб створити файл міграції, який автоматично генерує код у створеному файлі, щоб додати стовпець до моделі Tweet із цілим числом даних. Тепер я хочу додати значення за замовчуванням до доданого стовпця під час генерації файлу міграції. Це можливо? Я погуглив його, але не міг знайти. Хлопці потребують допомоги.


дивіться RailsGuide на тему: guides.rubyonrails.org/migrations.html шукану інформацію ви знайдете в першому розділі "Анатомія міграції"
Остін Лін

1
Я точно знаю, що ти маєш на увазі. Я також намагався встановити значення за замовчуванням, і це було якоюсь болю, намагаючись знайти інформацію. Просто створити головий SQL було простіше, хоча тоді в контролі версій немає міграції.
Тасс

Відповіді:


166

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

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

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

... і читати API Rails


9
Добре дякую за відповідь. Я подумав, що буде чудово, якщо генератор міграції за замовчуванням надасть можливість обробляти значення за замовчуванням, так що мені не доведеться редагувати файл міграції після створення, щоб вказати значення за замовчуванням.
kxhitiz


9

Так, я не міг бачити, як використовувати "за замовчуванням" в команді генератора міграції, але зміг вказати значення за замовчуванням для нового стовпчика рядків, як це слід, змінивши згенерований файл міграції перед застосуванням "rake db: migrate":

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

Це додає новий стовпець під назвою "color" до моєї моделі "Віджет" і встановлює для "widget" нових віджетів за замовчуванням "червоний".


(Це було в Rails 4.2.)
MSC

4

Я спробував t.boolean: active,: default => 1 у файлі міграції для створення всієї таблиці. Після запуску цієї міграції, коли я перевірив у db, він зробив як null. Незважаючи на те, що я за замовчуванням сказав "1". Після цього я трохи змінив файл міграції, як цей, тоді він працював для мене для встановлення значення за замовчуванням у створенні файлу міграції таблиці.

t.boolean: active,: null => false,: default => 1. Працювали для мене.

Моя рамкова версія версії 4.0.0


:default => false?
Крістофер Оезбек

2

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

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.