Я создал эту миграцию в Rails:
class AddSocialSecurityNumberToContactTable < ActiveRecord::Migration
def self.up
add_column :contacts, :ss_number, :string
end
def self.down
remove_column :contacts, :ss_number
end
end
В моей базе данных разработки, которая является базой данных SQLite3, все старые записи контактов получили поле ss_number, просто ноль. Однако всякий раз, когда я развертываю код с миграциями, старые записи контактов перед миграцией не имеют поля ss_number. Я перезапустил сервер и вошел в консоль и проверил это обоими способами как на рабочей базе данных (MySQL), так и на промежуточной базе данных (MySQL).
Если, однако, я создаю новую запись в консоли, она отображает поле ss_number для объекта Contact.
>> a = Contact.find(1)
=> #<Contact id: 1, first_name: "Gary", last_name: "Simpson", email: "", home_phone: "", work_phone: "", mobile_phone: "", mailing_street: "123 Main St", mailing_street_2: "", mailing_city: "Little Rock", mailing_state: "AR", mailing_zip: "72205", created_by: 1, created_at: "2010-07-24 19:30:10", updated_at: "2010-07-24 19:30:10">
>> a.ss_number
ActiveRecord::MissingAttributeError: missing attribute: ss_number
from /srv/www/domain/releases/20100727004056/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:217:in `send'
from /srv/www/domain/releases/20100727004056/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:217:in `method_missing'
from (irb):4
>> a = Contact.new
=> #<Contact id: nil, first_name: nil, last_name: nil, email: nil, home_phone: nil, work_phone: nil, mobile_phone: nil, mailing_street: nil, mailing_street_2: nil, mailing_city: nil, mailing_state: nil, mailing_zip: nil, created_by: nil, created_at: nil, updated_at: nil, ss_number: nil>
>> a.ss_number
=> nil
Как я могу сделать так, чтобы все существующие строки Контакта имели nil
в качестве значения после миграции?