Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带有命名空间项的Rails路由错误_Ruby On Rails_Routes_Rails Routing_Ruby On Rails 2 - Fatal编程技术网

Ruby on rails 带有命名空间项的Rails路由错误

Ruby on rails 带有命名空间项的Rails路由错误,ruby-on-rails,routes,rails-routing,ruby-on-rails-2,Ruby On Rails,Routes,Rails Routing,Ruby On Rails 2,我们有一个rails应用程序,它不断产生我们无法追踪的错误。问题似乎在于路线,但我们不确定发生了什么。输出路由文件如下所示: ActionController::Routing::Routes.draw do |map| # Default map.home '', :controller => "home" # Admin map.admin_home 'admin', :controller => 'admin/admin', :actio

我们有一个rails应用程序,它不断产生我们无法追踪的错误。问题似乎在于路线,但我们不确定发生了什么。输出路由文件如下所示:

  ActionController::Routing::Routes.draw do |map|
    # Default
    map.home '', :controller => "home"

    # Admin

    map.admin_home 'admin', :controller => 'admin/admin', :action => 'index'
    map.admin_login 'admin/login', :controller => 'admin/admin', :action => 'login'
    map.admin_reminder 'admin/forgot', :controller => 'admin/admin', :action => 'reminder'
    map.namespace :admin do |admin|
      admin.resources :bookings,
        :collection => {
          :archive => :get, :reports => :get, :calendar => :get,
          :step_1 => :any, :step_1a => :any, :step_2 => :any, :step_3 => :any, :confirmation => :any }
      admin.resources :events,
        :member => { :status => :get }
      admin.resources :blogs,
        :collection => { :archive => :get }
      admin.resources :blog_replies,
        :member => { :publish => :get }
      admin.resources :minutes,
        :collection => { :archive => :get }
      admin.resources :businesses
      admin.resources :business_categories
      admin.resources :users
      admin.resources :pricings
      admin.backups 'backups', :controller => 'admin/backups'
      admin.download_backup 'backups/download', :controller => 'admin/backups', :action => 'download'
    end
    map.admin 'admin/:action', :controller => 'admin/admin'

    map.connect 'members', :controller => 'admin/admin', :action => 'redirect_to_index'
    map.connect 'members/login', :controller => 'admin/admin', :action => 'redirect_to_index'
    map.connect 'account', :controller => 'admin/admin', :action => 'redirect_to_index'
    map.connect 'account/login', :controller => 'admin/admin', :action => 'redirect_to_index'
    map.connect 'home', :controller => 'admin/admin', :action => 'redirect_to_index'
    map.connect 'home/login', :controller => 'admin/admin', :action => 'redirect_to_index'

    map.blog 'blog/:permalink', :controller => 'blogs', :action => 'show'
    map.connect 'blog/:id', :controller => 'blogs', :action => 'show'
    map.connect 'book-online', :controller => 'bookings', :action => 'step_1'
    map.connect 'book-online/:action', :controller => 'bookings'
    # Defaults
    map.connect ':controller/:action/:id'
    map.connect "*anything", :controller => "public", :action => "unknown_request"
  end
我们在app/controllers中有一组公共控制器,在app/controllers/admin中有一组管理员控制器。我们一直看到的问题是,当用户转到像admin/bookings、admin/bookings/step_1或admin/events这样的url时。有时URL工作正常,但有时我可以从日志文件中看到如下情况:

ActionController::UnknownAction (No action responded to index):
其他时候,我们会得到如下结果:

Processing EventsController#index (for [filtered] at 2009-01-21 10:54:38) [GET]
Session ID: [filtered]
Parameters: {"action"=>"index", "controller"=>"admin/events"}
Rendering template within layouts/public
Rendering events/index
Completed in 0.00863 (115 reqs/sec) | Rendering: 0.00338 (39%) | DB: 0.00000 (0%) | 200 OK [http://www.gresfordtrust.org/admin/events]
从上一个示例中,您可以看到请求的url是
admin/events
,它应该在
admin::eventscocontroller
中点击
#index
,但它在
eventscocontroller
中呈现
#index
操作


我们正在使用Rails 2.0.2运行应用程序。

您没有为EventsController配置的路由,因此发生错误,因为某些请求落在默认路由上,
map.connect':controller/:action/:id'

发生这种情况的原因是某人/某物正在发送一个HTTP方法的请求,该方法未为您的AdminEventsController配置。您的
admin.resources:events,:member=>{:status=>:get}
将匹配以下请求:

GET /admin/events
GET /admin/events/<id>
GET /admin/events/<id>/status
POST /admin/events
PUT /admin/events/<id>
DELETE /admin/events/<id>
解决方案是完全摆脱默认路由,并确保在正确的位置为所有控制器添加
资源]
路由

GET /admin/events/index