Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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 Ruby On Rails自定义路由始终重定向到控制器';让我们行动起来_Ruby On Rails_Ruby_Routing - Fatal编程技术网

Ruby on rails Ruby On Rails自定义路由始终重定向到控制器';让我们行动起来

Ruby on rails Ruby On Rails自定义路由始终重定向到控制器';让我们行动起来,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,我正在尝试创建一条新路线,以便利用RoR的路径变量功能,即新建游戏路径。在我的例子中,我想使用加载游戏路径 我已为相应的控制器创建了一个操作,当前的路由如下: resources :games do get 'load', on: :collection end 每次我使用加载游戏路径时,它都会使用正确的URI,但似乎会重定向到GamesController的show操作,并显示游戏的inherit show视图 我已经检查了rake routes,我看到了我新创建的路由,其中似乎有所

我正在尝试创建一条新路线,以便利用RoR的路径变量功能,即新建游戏路径。在我的例子中,我想使用加载游戏路径

我已为相应的控制器创建了一个操作,当前的路由如下:

resources :games do
    get 'load', on: :collection
end
每次我使用加载游戏路径时,它都会使用正确的URI,但似乎会重定向到GamesController的show操作,并显示游戏的inherit show视图

我已经检查了rake routes,我看到了我新创建的路由,其中似乎有所需的路径/games/load(文件路径:/views/games/load.html.erb)

耙道:

    welcome_index GET    /welcome/index(.:format)    welcome#index
      players GET    /players(.:format)          players#index
              POST   /players(.:format)          players#create
   new_player GET    /players/new(.:format)      players#new
  edit_player GET    /players/:id/edit(.:format) players#edit
       player GET    /players/:id(.:format)      players#show
              PUT    /players/:id(.:format)      players#update
              DELETE /players/:id(.:format)      players#destroy
        games GET    /games(.:format)            games#index
              POST   /games(.:format)            games#create
     new_game GET    /games/new(.:format)        games#new
    edit_game GET    /games/:id/edit(.:format)   games#edit
         game GET    /games/:id(.:format)        games#show
              PUT    /games/:id(.:format)        games#update
              DELETE /games/:id(.:format)        games#destroy
        users GET    /users(.:format)            users#index
              POST   /users(.:format)            users#create
     new_user GET    /users/new(.:format)        users#new
    edit_user GET    /users/:id/edit(.:format)   users#edit
         user GET    /users/:id(.:format)        users#show
              PUT    /users/:id(.:format)        users#update
              DELETE /users/:id(.:format)        users#destroy
                     /players/:name(.:format)    players#index
   load_games GET    /games/load(.:format)       games#load
              GET    /games(.:format)            games#index
              POST   /games(.:format)            games#create
              GET    /games/new(.:format)        games#new
              GET    /games/:id/edit(.:format)   games#edit
              GET    /games/:id(.:format)        games#show
              PUT    /games/:id(.:format)        games#update
              DELETE /games/:id(.:format)        games#destroy
         root        /                           welcome#index
routes.rb:

     get "welcome/index"

     resources :players, :games, :users

     match '/players/:name'  => 'players#index'

     # match 'games/load(.:format)', :controller => 'games', :action => 'load'

      resources :games do
        collection do
          get 'load'
        end
      end

root :to => 'welcome#index'
我知道加载是控制器的预定义操作。为了确保这不是一个问题,我尝试了一个任意名称的行动-产生相同的结果

我也尝试过,但没有成功:

match 'games/load(.:format)', :controller => 'games', :action => 'load'
试一试

现在它将“games/load”解释为“games/:id”,其中:id参数设置为“load”,并将“games/:id”路由到GamesController#show


编辑:并确保在路由文件的前面没有对
resources:games
的另一个调用,即使:games只是
resources:players,:games
等几个参数之一,因为如果有,以后将无法插入收集方法。

日志怎么说?它将告诉您正在调用哪个操作。你可以看到,它正试图呼吁采取行动。不确定HTML id=>“load”参数的含义2013-07-25 21:07:36-0400 GamesController开始处理127.0.0.1版的“/games/load”{“id=>“load”}在4ms ActionView::MissingTemplate中完成了500个内部服务器错误(缺少模板games/show,应用程序/show,带有{:locale=>[:en],:formats=>[:HTML],:handlers=>[:erb,:builder,:coffee]}搜索:“:“W:/Rails/testApp/blog/app/views”):actionpack”您能将
rake routes
结果粘贴到这里吗?只有那个些和游戏有关的,并且有秩序的。因为我在想,你是否有可能“无意中”找到另一条路,然后通过这条路来展示你的行动。我现在已经在原始帖子中加入了rake路由,并获得了相同的结果。我也尝试了member do,但返回了以下错误:
没有路由匹配{:action=>“load”,:controller=>“games”}
我明白你的意思,这一定是它调用show action的原因吧?因为它认为我试图展示一个特定的“游戏”?当我真的只想显示游戏的特定子页面时。使用collection时,是否会在日志中包含相同的消息(由GamesController#show处理)得到相同的结果?collection确实会产生相同的结果:
缺少模板的游戏/显示,使用{:locale=>[:en],:formats=>[:html],:handlers=>[:erb,:builder,:coffee]}。搜索:“/W:/Rails/testApp/blog/app/views”
日志显示由GamesController处理#show正如您所说,我认为系统认为我试图通过一个游戏,即games/1/show.html.erb。实际上,我只想显示/games/(../games/load.html.erb)的子页面。我没想到会这么难,我一定是做错了什么。我打赌你的问题是
resources:players,:games,:users
-对于列表中的:games,当你尝试添加收集方法时,它会忽略重新定义。将顶行更改为
resources:players,:users
,您将获得金牌。
match 'games/load(.:format)', :controller => 'games', :action => 'load'
resources :games do
  collection do
    get 'load'
  end
end