Контроллер пространства имен вызывает ошибку в Rails-3 - PullRequest
4 голосов
/ 08 мая 2011

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

Я создал tags_controller.rb, который содержит

class ActsAsTaggableOn::TagsController < ApplicationController
    # ...
end

и в моем route.rb я добавил

resources :tags, :module => :acts_as_taggable_on

Когда я запускаю rake routes, я получаю

    tags GET    /tags(.:format)             {:action=>"index", :controller=>"acts_as_taggable_on/tags"}
         POST   /tags(.:format)             {:action=>"create", :controller=>"acts_as_taggable_on/tags"}
 new_tag GET    /tags/new(.:format)         {:action=>"new", :controller=>"acts_as_taggable_on/tags"}
edit_tag GET    /tags/:id/edit(.:format)    {:action=>"edit", :controller=>"acts_as_taggable_on/tags"}
     tag GET    /tags/:id(.:format)         {:action=>"show", :controller=>"acts_as_taggable_on/tags"}
         PUT    /tags/:id(.:format)         {:action=>"update", :controller=>"acts_as_taggable_on/tags"}
         DELETE /tags/:id(.:format)         {:action=>"destroy", :controller=>"acts_as_taggable_on/tags"}

… что мне кажется разумным.

Однако, когда я нажимаю localhost: 3000 / tags, я получаю эту ошибку:

LoadError (Expected MyApp/tags_controller.rb to define TagsController)

Если я пытаюсь оценить ActsAsTaggableOn::TagsController в консоли, я получаю в основном ту же ошибку:

LoadError: Expected MyApp/app/controllers/tags_controller.rb to define TagsController
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:492:in `load_missing_constant'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:183:in `block in const_missing'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:181:in `each'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:181:in `const_missing'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:503:in `load_missing_constant'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:183:in `block in const_missing'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:181:in `each'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:181:in `const_missing'
    from (irb):1
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.4/lib/rails/commands/console.rb:44:in `start'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.4/lib/rails/commands/console.rb:8:in `start'
    from ~/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.4/lib/rails/commands.rb:23:in `'
    from script/rails:6:in `require'
    from script/rails:6:in `'

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Rails ожидает, что модули и классы будут в каталоге их пространства имен.Поэтому вы должны переместить свой контроллер, представления и помощники в каталог acts_as_taggable_on:

  • app/controllers/acts_as_taggable_on/tags_controller.rb
  • app/views/acts_as_taggable_on/tags/index.html.erb
  • и т. Д.

Я не уверен, зачем вам это пространство имен.Если вы хотите создать действия REST только для существующей модели, вы можете сгенерировать scaffold_controller.Например:

rails generate scaffold_controller Tag name:string
0 голосов
/ 18 мая 2011

Микаэль прав насчет структуры каталогов для контроллеров пространства имен.

При этом контроллер не обязательно должен находиться в том же пространстве имен, что и модель. Напротив, у вас может быть контроллер с именем SomeController, работающий с моделью с именем SomeModel. Вы уже пытались удалить пространство имен из класса контроллера и посмотреть, что идет не так?

...