Почему Active Record не отправляет те же данные, что и schema.rb? - PullRequest
0 голосов
/ 02 июля 2018

Я создал новую миграцию , чтобы добавить столбец с именем transferred в advance_payments таблицу.

class AddTransferredToAdvancePayments < ActiveRecord::Migration[5.0]
  def change
    add_column :advance_payments, :transferred , :boolean, default: false
  end
end

После миграции столбец существует в schema.rb :

  create_table "advance_payments", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
   ...
    t.boolean  "transferred",                                    default: false
   ...
  end

Консоль

Но когда я проверяю объект AdvancePayment в консоли, столбец с именем transferred

отсутствует

AdvancePayment.last.transferred или AdvancePayment.last.transferred?

NoMethodError: неопределенный метод "передал"

[1] pry(main)> AdvancePayment.last
  AdvancePayment Load (0.5ms)  SELECT  `advance_payments`.* FROM `advance_payments` ORDER BY `advance_payments`.`id` DESC LIMIT 1
=> #<AdvancePayment:0x0000000747e468
 id: 107,
 ...
 // all columns except "transferred"



[10] pry(main)> AdvancePayment.has_attribute?(:transferred)
=> false

Я попытался db:migrate и db:schema:load, и я получил тот же результат. Я также попытался drop, чем воссоздать БД, закрыть, а затем снова лучше открыть сервер.

1 Ответ

0 голосов
/ 02 июля 2018

Не могу действительно объяснить, почему, но редактирование change метода up и down решило проблему

  def self.up
    add_column :advance_payments, :transferred , :boolean, default: false
  end

  def self.down
    remove_column :advance_payments, :transferred
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...