加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 命名空间控制器在Rails-3中导致错误

发布时间:2020-12-17 01:59:09 所属栏目:百科 来源:网络整理
导读:我正在使用ActsAsTaggableOn为我的应用程序添加标记.除了我从这个gem获得的功能,我还想添加一个TagsController,并基本上将标签视为我的应用程序中的任何其他资源. 我创建了包含的tags_controller.rb class ActsAsTaggableOn::TagsController ApplicationCont
我正在使用ActsAsTaggableOn为我的应用程序添加标记.除了我从这个gem获得的功能,我还想添加一个TagsController,并基本上将标签视为我的应用程序中的任何其他资源.

我创建了包含的tags_controller.rb

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

在我的routes.rb我添加了

resources :tags,:module => :acts_as_taggable_on

当我运行rake路线时,我得到了

    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 `'

我究竟做错了什么?

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读