Rails 3 Проблема перегиба - PullRequest
4 голосов
/ 10 июня 2011

У меня проблема с генерацией строительных лесов для регаты.Когда я запускаю

rails g scaffold Regatta name:string start_date:datetime

, я получаю модель с именем regattum и контроллер с именем regatta_controller (вместо regattas_controller)

  invoke  active_record
  create    db/migrate/20110609221608_create_regatta.rb
  create    app/models/regattum.rb
  invoke    test_unit
  create      test/unit/regattum_test.rb
  create      test/fixtures/regatta.yml
   route  resources :regatta
  invoke  scaffold_controller
  create    app/controllers/regatta_controller.rb
  invoke    erb
  create      app/views/regatta
  create      app/views/regatta/index.html.erb
  create      app/views/regatta/edit.html.erb
  create      app/views/regatta/show.html.erb
  create      app/views/regatta/new.html.erb
  create      app/views/regatta/_form.html.erb
  invoke    test_unit
  create      test/functional/regatta_controller_test.rb
  invoke    helper
  create      app/helpers/regatta_helper.rb
  invoke      test_unit
  create        test/unit/helpers/regatta_helper_test.rb
  invoke  stylesheets

идентичные public / stylesheets / scaffold.css

Очевидно, это проблема перегиба, но всякий раз, когда я изменяю /config/initializers/inflections.rb, я получаю сообщение об ошибке:

The name 'Regatta' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.

Я пробовал все, что мог, чтобы это работало, но япродолжаю получать ошибку.Буду очень признателен за любые советы по решению или обходному решению!


Обновление

Вот некоторые из вещей, которые я пробовал:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'regatta', 'regattas'
end

Это ничего не изменило, поэтому я попробовал некоторые из приведенных ниже вариантов, среди прочего, в разных комбинациях, но безрезультатно:

 inflect.plural 'regatta', 'regattas'
  inflect.singular 'regattas', 'regatta'
  inflect.singular 'regatta', 'regatta'

Обновление 2

Вот код, который я использовал в inflections.rb, как только я понял, что я делаю неправильно:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural 'regatta', 'regattas'
  inflect.singular 'regatta', 'regatta'
  inflect.singular 'regattas', 'regatta'
end

Надеюсь, это поможет кому-то в будущем!

Ответы [ 2 ]

9 голосов
/ 07 июня 2012

Я признаю, что этот пост старый, но я подумал, что я тоже поделюсь своими выводами.

После многих разработок я интегрировал rpsec и огурец в свое приложение (да;Я хотел сгенерировать заглушки rspec для моих моделей и протестировать модуль приложения.Обычно я могу перенести связанную миграцию из db / migrate / и запустить 'bundle exec rails g', чтобы восстановить леса и в этом случае заглушки rspec.Не в этот раз.

bundle exec rails g scaffold User email:string ... 
      updated_at:datetime roles_mask:integer --trace

      invoke  active_record

The name 'User' is either already used in your application 
      or reserved by Ruby on Rails. Please choose an alternative 
      and run this generator again.

Моя проблема была решена путем временного закомментирования строки 'devise_for' в моем файле config / rout.rb

config / rout.rb

#devise_for :users

Бинго.И это не единственный раз, когда Devise удивляет меня «черной магией», которая не совсем очевидна.Разумеется, я удалил комментарий, как только были сгенерированы мои заглушки rspec.Теперь можно писать мои юнит-тесты!

1 голос
/ 10 июня 2011

Учитывая сообщение об ошибке, в котором говорится, что Regatta уже используется в вашем приложении (оно, очевидно, не зарезервировано Rails), я предполагаю, что модель Regattum все еще на месте.

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

...