Невозможно запустить rake db: schema: load, если база данных уже не загружена - PullRequest
2 голосов
/ 10 февраля 2011

Tricky.Мои модели Rails включают в себя такие строки, как:

scope :unread, where(arel_table[:read].eq(false))

Эта строка, однако, не может быть запущена, пока не определено arel_table[:read], и оно не определено, если столбец не существует.(Эта строка может быть переписана так, чтобы не использовать Arel, но некоторые области не могут.)

Однако, когда я пытаюсь запустить rake db:schema:load, я получаю NoMethodError в результате того, что arel_table[:read] не определено,Короче, это Catch-22.Я не могу загрузить схему базы данных без запуска среды, и я не могу загрузить среду, если база данных уже загружена.

Есть ли лучший ответ, чем "закомментировать все эти строки, а затем раскомментировать, когда закончите?«?Есть ряд оскорбительных строк.

1 Ответ

1 голос
/ 10 февраля 2011

Вот в чем проблема с использованием arel в области видимости.Это может повлиять на миграцию.Простое решение - просто перейти на сырой SQL.

scope :unread, where('read = false')

Более длинный ответ заключается в том, что класс каким-то образом загружается при запуске миграции (обычно он не загружается).Если вы можете найти, что вызывает загрузку этого класса во время миграции, и обойти его, вы все равно можете использовать arel_table в области видимости.Но, вероятно, оно того не стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...