Как мне восстановиться после неудачного переименования модели ActiveRecord? - PullRequest
0 голосов
/ 11 апреля 2011

Я создал модель Rails (и контроллер) с опечаткой в ​​названии. Я переименовал все файлы с правильными именами, а затем откатил миграцию, которую использовал для создания таблицы, и изменил ее, чтобы воссоздать таблицу с правильным именем.

К сожалению, ActiveRecord по-прежнему хочет использовать старое имя таблицы, хотя оно не отображается ни в одном файле в моем проекте. Я предполагаю, что это было где-то кэшировано, но я понятия не имею, где. В каталоге tmp приложения нет файлов, которые выглядят подозрительно.

В настоящее время я добавил вызов "set_table_name" в модель, чтобы обойти проблему, но мне действительно любопытно, где хранится старое имя таблицы и как от него избавиться.

Обновление: я удалил эшафот, используя "rails destroy scaffold". Когда я воссоздал его (без опечатки), он все воссоздал с опечаткой! Я знаю, что опечатка где-то кешируется, но я не знаю, где.

Ответы [ 4 ]

1 голос
/ 13 апреля 2011

Rafe - Похоже, это может быть ошибка в Rails.Возможно, вы могли бы отправить запрос на загрузку Rails или попробовать добавить его в файл config / initializers / inflections.rb.

1 голос
/ 11 апреля 2011

Как правило, опечатки обнаруживаются довольно быстро: в первый раз модель упоминается в консоли или ассоциациях;контроллер в маршрутах.

Когда я rails generate model urser я просто rails destroy model urser и запускаю снова.

Это просто взрывает файлы, но это очень удобно и в рельсах 3 работает особенно хорошоуничтожить каждый файл, созданный генератором.

Если я выполню миграцию до того, как обнаружу опечатку, я разрешу удалить миграцию сценарием уничтожения, пусть генерирует запись, а затем rake db:rollback.Таким образом, urser_table из предыдущей миграции удаляется и создается user_table .

Если в файлах есть немного кода, то в этот момент в основноммодель или сам контроллер.Я просто копирую в буфер обмена мясо класса перед удалением файла и вставляю его в следующий.

Если в тестах различных моделей, контроллерах или вспомогательных файлах много кода: я все еще использую тот же кодподход, но перед тем, как запустить команду destroy, передайте его git, так что если у вас что-то получится, вы всегда сможете вернуться обратно.

1 голос
/ 11 апреля 2011

вы исправили название класса вашей модели? рельсы выводят имя таблицы из этого

например. "class Userr" -> "userrs"

0 голосов
/ 12 апреля 2011

ОК, оказывается, что с Rails 3 (и, возможно, с другими версиями), если вы попытаетесь сгенерировать модель с именем "Cafe", вместо нее будет использоваться имя "cave". Понятия не имею, почему.

Вот пример. Я тоже продублировал это на разных компьютерах.

holloway:whatever rafeco$ rails g scaffold Cafe 
  invoke  active_record
  create    db/migrate/20110412190231_create_caves.rb
  create    app/models/cafe.rb
  invoke    test_unit
  create      test/unit/cafe_test.rb
  create      test/fixtures/caves.yml
   route  resources :caves
  invoke  scaffold_controller
  create    app/controllers/caves_controller.rb
  invoke    erb
  create      app/views/caves
  create      app/views/caves/index.html.erb
  create      app/views/caves/edit.html.erb
  create      app/views/caves/show.html.erb
  create      app/views/caves/new.html.erb
  create      app/views/caves/_form.html.erb
  invoke    test_unit
  create      test/functional/caves_controller_test.rb
  invoke    helper
  create      app/helpers/caves_helper.rb
  invoke      test_unit
  create        test/unit/helpers/caves_helper_test.rb
  invoke  stylesheets
  create    public/stylesheets/scaffold.css
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...